我注意到,如果我有一个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
from更改id_a
为foo_bar_baz
我得到这个错误:
org.hibernate.MappingException:无法在 org.hibernate.mapping.Table(MY_SCHEMA.MYENTITY) 及其相关的超级表和辅助表中找到具有逻辑名称的列:ID_A
我希望该错误会抱怨列FOO_BAR_BAZ
不存在,而不是ID_A
. 它为什么抱怨 ID_A
?
更新:原来我得到这个错误是因为其他实体与MYENTITY
with相关@ManyToOne
,并且id_a
在@JoinColumns
.