0

我注意到,如果我有一个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@AttributeOverridefrom更改id_afoo_bar_baz我得到这个错误:

org.hibernate.MappingException:无法在 org.hibernate.mapping.Table(MY_SCHEMA.MYENTITY) 及其相关的超级表和辅助表中找到具有逻辑名称的列:ID_A

我希望该错误会抱怨列FOO_BAR_BAZ不存在,而不是ID_A. 它为什么抱怨ID_A

更新:原来我得到这个错误是因为其他实体与MYENTITYwith相关@ManyToOne,并且id_a@JoinColumns.

4

0 回答 0