SpringBoot JPA 注解使用手册

一 @OneToMany,@ManyToOne注释的使用

在这里插入图片描述

@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 (简单)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值