Я заметил, что если у меня есть таблица MYENTITY
со столбцами ID_A
и ID_B
и сущностью @Embeddable
:
@Embeddable
public class EmbedMe {
@Column(name="col_a")
private String a;
@Column(name="col_b")
private String b;
// getters-setters
}
И я использую это таким образом в @Entity
:
@Entity
@Table(name="MyEntity")
public class MyEntity {
@EmbeddedId
@AttributeOverrides( {
@AttributeOverride(name = "a",
column = @Column(name = "id_a")),
@AttributeOverride(name = "b",
column = @Column(name = "id_b")),
@AttributeOverride(name = "inexistingProp",
column = @Column(name = "INEXISTENT_COL")),
})
private EmbedMe embeded;
}
Переопределение для inexistingProp
игнорируется вместо того, чтобы выдавать исключение неправильного отображения. Я нигде не нашел этого документа, это поведение JPA? Есть ли официальная документация по этому вопросу?
Кроме того, я заметил, что если @Embeddable
уже имеет правильное отображение ("id_a"
), и я изменяю @Column
в @AttributeOverride
с id_a
на foo_bar_baz
, я получаю эту ошибку:
org.hibernate.MappingException: не удалось найти столбец с логическим именем: ID_A в org.hibernate.mapping.Table (MY_SCHEMA.MYENTITY) и связанных с ним надстроек и вторичных таблиц
Я ожидаю, что ошибка выдаст сообщение о том, что столбец FOO_BAR_BAZ
не существует, а не ID_A
. Почему он жалуется на ID_A
?
ОБНОВЛЕНИЕ : Оказалось, что я получаю эту ошибку из-за наличия других сущностей, связанных с MYENTITY
с @ManyToOne
, и с id_a
эксплицированным в @JoinColumns
.