spring boot hibernate常用注解

深碍√TFBOYSˉ_ 2022-04-14 03:21 301阅读 0赞

hibernate常用注解

表注


创建表

  1. //不声明entity表无法创建
  2. @Entity
  3. @Table(name = "表名")
  4. @DynamicInsert
  5. @DynamicUpdate
  6. //解决hibernate json 延时加载,接受参数,字段无效问题
  7. @JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})

主键

uuid Oracle使用

  1. @Id
  2. @GeneratedValue(generator = "uuid2")
  3. @GenericGenerator(name = "uuid2", strategy = "uuid2")

自增 mysql使用

  1. @Id
  2. @GeneratedValue(strategy = GenerationType.IDENTITY)
  3. @Column(name = "列名",unique = true,nullable = false)

不会生成数据库列

  1. @Transient

查询默认排序

  1. @OrderBy(value = "列名 ASC")

枚举类型(数据库存储序列,或字符)

  1. @Enumerated(EnumType.ORDINAL)//序列自动不需要配置
  2. @Enumerated(EnumType.STRING)//例如Sex.MAN 存储MAN

自定义数据类型

  1. @Column(name = "列名",columnDefinition ="数据库类型")

实体类关系

一对一关系

单向关系

  1. @OneToOne(cascade ={CascadeType.DETACH,CascadeType.PERSIST,CascadeType.MERGE},fetch = FetchType.LAZY)
  2. @JoinColumn(name="外键列名")

双向关系

  1. @OnegToOne(mappedBy = "参考映射对象",cascade = {CascadeType.DETACH,
  2. CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.LAZY)

多对一关系

ManyToOne**(多对一)单向:不产生中间表**

  1. @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.PERSIST, CascadeType.MERGE},
  2. fetch = FetchType.LAZY)
  3. @JoinColumn(name = "外键列名")

OneToMany(一对多)单向:会产生中间表

OneToMany**双向使用mappedy属性不会产生中间表**

  1. @OneToMany(cascade = {CascadeType.DETACH, CascadeType.PERSIST, CascadeType.MERGE}
  2. ,fetch = FetchType.LAZY)
  3. @JoinTable(name = "中间表名", joinColumns = @JoinColumn(name = "当前类id"),
  4. inverseJoinColumns = @JoinColumn(name = "集合类型id"))

多对多关系

多对多由一方维护关系即可

  1. @OneToMany(cascade = {CascadeType.DETACH, CascadeType.PERSIST, CascadeType.MERGE}
  2. ,fetch = FetchType.LAZY)
  3. @JoinTable(name = "中间表名", joinColumns = @JoinColumn(name = "当前类id"),
  4. inverseJoinColumns = @JoinColumn(name = "集合类型id"))
  5. //Joincolums为本表映射id inverseJoinColumns为另一张表

双向关系

  1. @ManyToMany(mappedBy = "映射集合",cascade =
  2. {CascadeType.DETACH,CascadeType.PERSIST, CascadeType.MERGE}
  3. , fetch = FetchType.LAZY)

映射为另一方的关系


懒加载死循环

@JsonIgnoreProperties不同于@JsonIgnore在于,你可以注明该变量中的哪个属相不被序列化。从而允许在双向访问上都不存在环或是缺失。

  1. @JsonIgnoreProperties("另一方对象或集合名称")

级联操作

CascadeType.REMOVE(级联删除操作)

Cascade remove operation**,级联删除操作。删除当前实体时,与它有映射关系的实体也会跟着被删除。**

CascadeType.MERGE (级联更新操作)

Cascade merge operation { 级联更新(合并)操作}当Student中的数据改变,会相应地更新Course中的数据。

CascadeType.DETACH(级联脱管/游离操作)

Cascade detach operation**,级联脱管/游离操作。**

如果你要删除一个实体,但是它有外键无法删除,你就需要这个级联权限了。它会撤销所有关的外键关联。

CascadeType.REFRESH (级联刷新操作)

Cascade refresh operation**,级联刷新操作。**

假设场景 有一个订单,订单里面关联了许多商品,这个订单可以被很多人操作,那么这个时候A对此订单和关联的商品进行了修改,与此同时, B也进行了相同的操作,但是B先一步比A保存了数据,那么当A保存数据的时候,就需要先刷新订单信息及关联的商品信息后,再将订单及商品保存。

CascadeType.ALL

Cascade all operations**,清晰明确,拥有以上所有级联操作权限。**


子类父类 单表配置 single table

父类

  1. @Entity
  2. @Table(name = "表名")
  3. @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
  4. @DiscriminatorColumn(name = "区分子类类型(列)")

例如:@DiscriminatorColumn(name = “type”) 本表会多出type列

子类

继承父类

  1. @Entity
  2. @DiscriminatorValue("子表名称") 注:对应 DiscriminatorColumn 列是它的值

例如:@DiscriminatorValue(“test”) 数据库显示为type列等于test


子类父类 多表配置 joined

父类

  1. @Entity
  2. @Table(name = "表名")
  3. @Inheritance(strategy = InheritanceType.JOINED)

子类

继承父类

  1. @Entity
  2. @Table(name="表名")

发表评论

表情:
评论列表 (有 0 条评论,301人围观)

还没有评论,来说两句吧...

相关阅读