springbootJpa注解⼤全(最齐全最详细的注解)
@Entity:@Table(name=”“):表明这是⼀个实体类。⼀般⽤于jpa这两个注解⼀般⼀块使⽤,但是如果表名和实体类名相同的话,
@Table可以省略 @MappedSuperClass:⽤在确定是⽗类的entity上。⽗类的属性⼦类可以继承。
@NoRepositoryBean:⼀般⽤作⽗类的repository,有这个注解,spring不会去实例化该repository。
@Column:如果字段名与列名相同,则可以省略。
1)name:映射的列名。如:映射tbl_user表的name列,可以在name属性的上⾯或getName⽅法上⾯加⼊;
2)unique:是否唯⼀;
3)nullable:是否允许为空;
4)length:对于字符型列,length属性指定列的最⼤字符长度;
5)insertable:是否允许插⼊;
6)updatetable:是否允许更新;
7)columnDefinition:定义建表时创建此列的DDL;
8)secondaryTable:从表名。如果此列不建在主表上(默认是主表),该属性定义该列所在从表的名字。
@Id:表⽰该属性为主键。
1)TABLE:容器指定⽤底层的数据表确保唯⼀;
2)SEQUENCE:使⽤数据库德SEQUENCE列莱保证唯⼀(Oracle数据库通过序列来⽣成唯⼀ID);
3)IDENTITY:使⽤数据库的IDENTITY列莱保证唯⼀;
4)AUTO:由容器挑选⼀个合适的⽅式来保证唯⼀;springboot框架的作用
5)NONE:容器不负责主键的⽣成,由程序来完成。
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = “repair_seq”):表⽰主键⽣
成策略是sequence(可以为Auto、IDENTITY、native等,Auto表⽰可在多个数据库间切换),指定sequence的名字是repair_seq。
@SequenceGeneretor(name = “repair_seq”, sequenceName = “seq_repair”, allocationSize = 1):name为sequence的名称,以便使⽤,sequenceName为数据库的sequence名称,两个名称可以⼀致。
@Transient:表⽰该属性并⾮⼀个到数据库表的字段的映射,ORM框架将忽略该属性。如果⼀个属性并⾮数据库表的字段映射,就务必将其标⽰为@Transient,否则,ORM框架默认其注解为@Basic。
@Basic(fetch=FetchType.LAZY):标记可以指定实体属性的加载⽅式 @JsonIgnore:作⽤是json序列化时将Java bean中的⼀些属性忽略掉,序列化和反序列化都受影响。
@JoinColumn(name=”loginId”):⼀对⼀:本表中指向另⼀个表的外键。⼀对多:另⼀个表指向本表的外键。
@OneToOne 、@OneToMany 、@ManyToMany对应hibernate配置⽂件中的⼀对⼀,⼀对多、多对多
OneToMany可以使⽤连接表或者⽬标对象的表引⽤中的外键源对象表的主键。
OneToMany与JPA中ManyToMany关系的主要区别在于,ManyToMany总是使⽤中间关系连接表来存储关系。
manyToMany需要和@JoinTable表结合使⽤,ManyToMany总是使⽤中间关系连接表来存储关系。如果两个Vo都定义了ManyToMany 的话,因为单向关系,会⽣成有2个中间表。所以需要改造成双向关系,使其只存在⼀个中间表。
targetEntity: 默认关联的实体类型。如果集合类中指定了具体类型了,不需要使⽤targetEntity.否则需要targetEntity指定Cascade: 级联操作
Cascade 级联关系
实际业务中,我们通常会遇到以下情况:
1. ⽤户和⽤户的收货地址是⼀对多关系,当⽤户被删除时,这个⽤户的所有收货地址也应该⼀并删除。
2. 订单和订单中的商品也是⼀对多关系,但订单被删除时,订单所关联的商品肯定不能被删除。
此时只要配置正确的级联关系,就能达到想要的效果。
CascadeType.REFRESH:级联刷新,当多个⽤户同时作操作⼀个实体,为了⽤户取到的数据是实时的,在⽤实体中的数据之前就可以调⽤⼀下refresh()⽅法
CascadeType.REMOVE:级联删除,当调⽤remove()⽅法删除Order实体时会先级联删除OrderItem的相关数据
CascadeType.MERGE:级联更新,当调⽤了Merge()⽅法,如果Order中的数据改变了会相应的更新OrderItem中的数据
CascadeType.ALL:包含以上所有级联属性
CascadeType.PERSIST:级联保存,当调⽤了Persist() ⽅法,会级联保存相应的数据
需要注意的是,CascadeType.ALL要谨慎使⽤,为了达到数据同步,很多⼈喜欢⽤CascadeType.ALL来实现。但上⾯订单和商品的例⼦就不适⽤。
Fetch: 抓取是否延迟加载,默认情况⼀的⽅为⽴即加载FetchType.EAGER,多的⼀⽅为延迟加载FetchType.LAZY
mappedBy 属性
mappedBy是OneToOne、OneToMany和ManyToMany这三种关联关系的属性。
⽤来标注拥有这种关系的字段。 除⾮关系是单向的,否则是必需的。
那么什么叫拥有关联关系呢,假设是双向⼀对⼀的话,那么拥有关系的这⼀⽅有建⽴、解除和更新与另⼀⽅关系的能⼒。⽽另⼀⽅没有,只能被动管理。
由于JoinTable和JoinColumn⼀般定义在拥有关系的这⼀端,⽽mappedBy⼀定是定义在关系的被拥有⽅(the owned side),也就是跟定义JoinTable和JoinColumn互斥的⼀⽅,它的值指向拥有⽅中关于被拥有⽅的字段,可能是⼀个对象(OneToMany),也可能是⼀个对象集合(ManyToMany)。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。