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,那么保存时会提示错误。
解决方法是有三种:
- 数据库中设置字段属性可以为null
- 实体属性中设置初始值,如:private List<blog> = new ArrayList<>();
- 或者在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指的都是写入时的级联操作方式,默认情况下都是非级联写的。
以上是 JPA Entity注解的一些总结 的全部内容, 来源链接: utcz.com/z/354914.html