我注意到,如果我有一个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_a为foo_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.