У меня есть встраиваемый класс с двумя полями. Одно из них - перечисление, а другое поле относится к типу класса сущности.
@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?