【发布时间】:2020-05-07 20:37:21
【问题描述】:
我有一个包含两个字段的可嵌入类。一个是枚举,另一个字段是实体类类型。
@Embeddable
public class EmbeddableClass {
@OneToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="myField", insertable = false, updatable = false)
private EntityClass myField;
@Enumerated(EnumType.STRING)
@Column(name="enumValue", insertable=false, updatable=false)
private EnumClass enumValue;
protected EmbeddableClass() {}
public EmbeddableClass(EntityClass myField, EnumClass enumValue) {
this.myField = myField;
this.enumValue = enumValue;
}
}
我正在尝试将此类的对象嵌入到另一个类中。两个字段将属于这种类型,所以我必须使用@AttributeOverrides
@Entity
public class MyClass {
@Column(name = "column_one")
@AttributeOverrides({
@AttributeOverride(name="enumValue", column= @Column(name="column_one_enum_value")),
@AttributeOverride(name="myField", column= @Column(name="column_one_my_field"))
})
@Embedded
private EmbeddableClass embeddableClass1;
@Column(name = "column_two")
@AttributeOverrides({
@AttributeOverride(name="enumValue", column= @Column(name="column_two_enum_value")),
@AttributeOverride(name="myField", column= @Column(name="column_two_my_field"))
})
@Embedded
private EmbeddableClass embeddableClass2;
// ...
}
在数据库中,我预计 MyClass 表将有 4 列以 @AttributeOverride 注释的第二个参数命名。但这不是我得到的。
枚举的两列是正确的。但是对于实体类字段,我没有得到两个单独的列。我只根据类型名称得到一列:entity_class。当我将MyClass 对象持久化到数据库中时,entity_class 列仍然为空,即使我持久化的对象确实具有myField 值。
有没有办法让我实现上面描述的 4 列,同时仍然保持类 Embeddable?
【问题讨论】:
标签: java jpa spring-data-jpa