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<>();
}
收藏 打印