【发布时间】:2021-08-25 05:10:48
【问题描述】:
我正在使用 Hibernate 并具有以下 JPA 模型:
@Entity
public class MyEntity {
@Embedded
MyEmbeddable embedded;
}
@Embeddable
public class MyEmbeddable {
@Column
private String name;
@ElementCollection
@Enumerated(EnumType.STRING)
@Size(min = 1)
private Set<MyEnum> usage;
@NotNull
private LocalDate localDate;
}
MyEntity 可以包含MyEmbeddable,但整个embeddable 应该是可选的。因此,当MyEmbeddable 的所有属性为空或为空时,我更希望MyEntity.embedded 为null。
但是,当我从 DB 读取这样的实体时,Hibernate 将 embedded 初始化为 non-null - 当实体再次刷新到数据库时会导致约束错误。
作为一种解决方法,我必须在刷新/持久化之前向 null embedded 属性编写一些代码 - 这对我来说似乎是一个非常糟糕的主意。
我怀疑 ElementCollection 会导致这种初始化行为 - 因为根据 JPA 规范 ElementCollection 始终被初始化 empty(非空)。
任何想法/提示如何告诉 Hibernate 根本不初始化 embedded?
【问题讨论】:
-
你定义 setter 并在那里添加你的逻辑,检查对象是否不为 null 之类的,
embedded.isValid()并设置嵌入为 null 如果它是无效的。