SpringDataJpa备忘录

  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<>();
}
原文地址:https://www.cnblogs.com/youxiu326/p/10540750.html