@AttributeOverride игнорирует неправильные переопределения, это стандарт JPA или Hibernate? - PullRequest
0 голосов
/ 10 ноября 2011

Я заметил, что если у меня есть таблица 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.

...