SpringBoot JPA 注解使用手册

一 @OneToMany,@ManyToOne注释的使用

SpringBoot JPA 注解使用手册_第1张图片

@Entity
public class Employee {
  @Id
  @Column(name="EMP_ID")
  private long id;
  ...
  @OneToMany(mappedBy="owner")
  private List<Phone> phones;
  ...
}
@Entity
public class Phone {
  @Id
  private long id;
  ...
  @ManyToOne(cascade = CascadeType.ALL, fetch=FetchType.LAZY)
  @JoinColumn(name="OWNER_ID")
  private Employee owner;
  ...
}

fetch 加载类型,默认情况一的方为立即加载,多的一方为延迟加载

fetch=FetchType.LAZY的意思是select的时候懒加载,当加载phone这个对象的时候,会加载他的属性,如id,firstname,lastname,但是不会去加载owner的属性。如果不设置fetch=FetchType.LAZY,则默认是eager,不仅会加载id,firstname,lastname等属性,而且会加载owner里面的属性。
JoinColumn指的是Phone(多)表对应Employee(一)表关联字段的名称。

cascade: 级联类型

Java持久性体系结构支持的级联类型如下:

CascadeType.PERSIST:级联类型presist表示save()或persist()操作级联到相关实体。
CascadeType.MERGE:级联类型merge表示合并拥有的实体时合并相关的实体。
CascadeType.REFRESH:级联类型refresh对refresh()操作执行相同的操作。
CascadeType.REMOVE:级联类型在remove删除拥有实体时会删除与此设置关联的所有相关实体。
CascadeType.DETACH:detach如果发生“手动分离”,则级联类型分离所有相关实体。
CascadeType.ALL:级联类型all是上述所有级联操作的简写。
注意: JPA中没有默认的级联类型。默认情况下,没有操作级联。

mappedBy 关系维护

mappedBy= “parent” 表示在ListEntity类中的 parent 属性来维护关系,这个名称必须和ListEntity中的parent属性名称完全一致才行
OneToMany必须写mappedBy,不然会多生成一张没用的中间表,因为如果没写mappedBy,JPA不知道具体怎样做关联

JoinColumn

@JoinColumn与@Column标记一样,是用于注释表中的字段的。它的属性与@Column属性有很多相同之处,例如name属性是用来标识表中所对应的字段的名

称,其它的不再详述。

@JoinColumn与@Column相区别的是:@JoinColumn注释的是保存表与表之间关系的字段,它要标注在实体属性上(相当于外键)。而@Column标注的是表中不包含表关系的字段。

参考:
https://en.wikibooks.org/wiki/Java_Persistence/OneToMany
https://howtodoinjava.com/hibernate/hibernate-jpa-cascade-types/
https://www.cnblogs.com/xuwenjin/p/8831129.html (简单)

你可能感兴趣的:(Spring)