一般来说,@OneToMany中的Many是关系维护方,它持有One一方的主键(大部分情况下是主键)。
比如:一个分类对应多个文章,关系由文章来维护。
在 @OneToMany 和 @ManyToMany 中,一般在被维护方中使用 mappedBy 来指定维护方对应的属性。
当然这个指定也不是必须的。
@OneToMany和@ManyToMany中的 Many 默认使用 fetch = FetchType.LAZY 懒加载方式,One一方默认是 FetchType.EAGER,
必须二次调用实体类的 get 方法才能查找到数据,或者改为 fetch = FetchType.EAGER 立即返回数据。
或者直接加 @JsonIgnore 注解忽略。
当然,@OneToOne 默认也是FetchType.EAGER 方式。
optional 表示关联实体是否能够为 null,默认是 true,可以为null。
但是如果MySQL中的字段设置为 not null,那么保存时会提示错误。
解决方法是有三种:
关于日期时间的字段,在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的格式。
cascade指的都是写入时的级联操作方式,默认情况下都是非级联写的。