蒙国造博客

JPA Entity注解的一些总结

1关系维护方

一般来说,@OneToMany中的Many是关系维护方,它持有One一方的主键(大部分情况下是主键)。

比如:一个分类对应多个文章,关系由文章来维护。

2 mappedBy

@OneToMany@ManyToMany 中,一般在被维护方中使用 mappedBy 来指定维护方对应的属性。

当然这个指定也不是必须的。

3 fetch 方式

@OneToMany@ManyToMany中的 Many 默认使用 fetch = FetchType.LAZY 懒加载方式,One一方默认是 FetchType.EAGER

必须二次调用实体类的 get 方法才能查找到数据,或者改为 fetch = FetchType.EAGER 立即返回数据。

或者直接加 @JsonIgnore 注解忽略。

当然,@OneToOne 默认也是FetchType.EAGER 方式。

4 optinal选项

optional 表示关联实体是否能够为 null,默认是 true,可以为null

但是如果MySQL中的字段设置为 not null,那么保存时会提示错误。

解决方法是有三种:

  1. 数据库中设置字段属性可以为null
  2. 实体属性中设置初始值,如:private List<blog> = new ArrayList<>();
  3. 或者在service层中处理null值。

5 日期时间

关于日期时间的字段,在MySQL中我喜欢用 Datetime 格式,对应JPA实体就是Date

对于创建日期时间,数据库中一般设置为:not null default CURRENT_TIMESTAMP

对于更新日期时间,数据库中一般设置为:not null default CURREN_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

这样在保存时会提示数据库异常,可以加上:

@Column(insertable = false, updatable = false)

不用jpa更新,让MySQL操作。

一般来说,输出的格式也不是常用的格式,可以用:

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

输出类似:2019-01-01 00:00:01的格式。

5 cascade级联

cascade指的都是写入时的级联操作方式,默认情况下都是非级联写的。

 

 

退出移动版