eid*_*ihi 5 java hibernate jpa
我正在使用 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;
}
Run Code Online (Sandbox Code Playgroud)
MyEntity可以包含 MyEmbeddable,但整个 embeddable 应该是可选的。所以我更喜欢MyEntity.embedded当null的所有属性都MyEmbeddable为空或 null 时。
然而,当我从数据库读取这样的实体时,Hibernate 初始化embedded为non-null- ,当实体再次刷新到数据库时,这会导致约束错误。
作为一种解决方法,我必须在刷新/保留之前向该属性编写一些代码null-embedded这对我来说似乎是一个非常糟糕的主意。
我怀疑 ElementCollection 导致了这种初始化行为 - 因为根据 JPA 规范 ElementCollections 始终被初始化empty(不为 null)。
有什么想法/提示可以告诉 Hibernateembedded根本不初始化吗?
您确定所有嵌入列值均为空吗?localDate注释为NotNull,所以我认为这是阻止嵌入属性为空的问题。此外,@Size(min = 1)片场看起来也可能是一个问题。
请注意,Hibernate 提供了一个用于控制该行为的选项(https://in.relation.to/2016/02/10/hibernate-orm-510-final-release/):
从历史上看,Hibernate 始终会处理 @Embeddable 的所有空列值,这意味着 @Embeddable 本身应该为 null。5.1 允许应用程序指示 Hibernate 应使用空的 @Embeddable 实例。这是通过选择加入设置来实现的:
hibernate.create_empty_composites.enabled。有关详细信息,请参阅HHH-7610。
| 归档时间: |
|
| 查看次数: |
1891 次 |
| 最近记录: |