1. 单向多对一关系
//产品类型 一的一方
@Entity
public class ProductDir { @Id
@GeneratedValue
private Long id;
private String name;
}
//产品,多方
@Entity
public class Product { @Id
@GeneratedValue
private Long id;
private String name; //一方的对象
@ManyToOne //默认配置的ManyToOne 会自定键为外键,外键的名称=属性名_id
//多个产品Product对应一个产品类型dir
// 不能使用@Column(name = "dir_id")
@JoinColumn(name = "dir_id")
private ProductDir dir;
}

junit

	@Test
public void testSaveProduct() {
Product product = new Product();
product.setName("牛逼");
productService.save(product);
System.out.println("保存成功->"+product); Product product2 = new Product();
product2.setName("牛逼2");
product2.setDir(new ProductDir());
try {
productService.save(product2);
}catch (Exception e){
System.out.println("该操作会报错->因为一的那方没有id,即缺少外键关系");
}
Product product3 = new Product();
product3.setName("牛逼2");
ProductDir productDir = new ProductDir();
productDir.setName("牛逼的类型");
productDirService.save(productDir);
product3.setDir(productDir);//此时的产品类型有了id
productService.save(product3);
System.out.println("保存成功->"+product3);
System.out.println("保存成功->"+productDir);
}

@ManyToOne(fetch = FetchType.EAGER) 默认抓取策略,及时加载,一条sql语句
@OneToMany(fetch = FetchType.LAZY) 延时加载,多条sql语句(多的一方默认延时加载)
  1. 单向一对多关系
//产品,多方
@Entity
public class Product2 { @Id
@GeneratedValue
private Long id;
private String name;
}
//产品类型 一的一方
@Entity
public class ProductDir2 { @Id
@GeneratedValue
private Long id;
private String name; //单向一对多
@OneToMany
//必须配置外键id,否则会多生成一张表吗,形成多对多的关系
@JoinColumn(name = "dir_id")//建议在一的一方实例化集合
//(便于后面保存操作)
private Set products = new HashSet<>(); }

junit

	@Test
public void testSaveProduct2() {
Product2 product11 = new Product2();
product11.setName("产品11");
Product2 product22 = new Product2();
product22.setName("产品22"); ProductDir2 productDir2 = new ProductDir2();
productDir2.setName("牛逼2");
productDir2.getProducts().add(product11);
productDir2.getProducts().add(product22);
product2Service.save(product11);//保存后得到主键
product2Service.save(product22);//即获得外键关系
productDir2Service.save(productDir2);
System.out.println("保存成功->"+productDir2);
System.out.println("保存成功->"+product11);
System.out.println("保存成功->"+product22);
}

排序

    //单向一对多
@OneToMany
//必须配置外键id,否则会多生成一张表吗,形成多对多的关系
@JoinColumn(name = "dir_id")//建议在一的一方实例化集合(便于后面保存操作)
@OrderBy("id")//默认属性值,不写即升序,
//@OrderBy("id DESC")
private Set products = new HashSet<>();
  1. 双向一对多关系
//产品,多方
@Entity
public class Product { @Id
@GeneratedValue
private Long id;
private String name; @ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "dir_id")
private ProductDir dir;
}
//产品类型 一的一方
@Entity
public class ProductDir { @Id
@GeneratedValue
private Long id;
private String name; @OneToMany(fetch = FetchType.LAZY,mappedBy = "dir")
//双向一对多,不配置@JoinColumn,配置新的属性mappedBy = "dir"
//表示一方的关系参照多方Product属性dir来管理
private Set products = new HashSet<>();
}

最新文章

  1. POJ1625 Censored!(AC自动机+DP)
  2. jQuery Dialog弹出层对话框插件
  3. svn cleanup failed–previous operation has not finished 解决方法
  4. JS中的原型继承和多重继承
  5. Pro Aspnet MVC 4读书笔记(1) - Your First MVC Application
  6. VS解决方案创建
  7. 架构师Jack专访:全面认识软件测试架构师
  8. 【Java学习笔记之八】JavaBean中布尔类型使用注意事项
  9. Python爬虫11-XML与XPath概述及lxml库的应用
  10. win7 中 sql server2005 卸载简介
  11. 20165215 2017-2018-2《Java程序设计》课程总结
  12. SSM实现简单后台分页
  13. ClassOne__HomeWork
  14. SpringMVC之表单校验
  15. 【转】深入理解C++中public、protected及private用法
  16. GIT的使用及心得
  17. Codeigniter base_url() 返回的怎么是ip地址
  18. LINUX QQ2(转载)
  19. Windows下配置Git服务器和客户端
  20. eclipse 导出可执行jar文件

热门文章

  1. Mybatis学习笔记(详细)
  2. 修改安卓AVD虚拟机的默认下载路径
  3. java复习面向对象(二)
  4. jq 全选 全不选
  5. thinkphp 登录(未设置cookie+session)
  6. vue项目在nginx中不能刷新问题
  7. CF498B题解
  8. 分享一些阅读Java相关框架源码的经验
  9. Div+CSS 定位 Position
  10. surface重装系统后,屏幕亮度不能调节,显示适配器出现黄色三角、windows hello不能正常使用