我有以下数据库架构:
table a {
id,
state
}
table b {
id,
a_id,
is_valid,
amount
}
我希望有一个hibernate映射,只有当a.state具有特定值时才从表b中获取值。这是我的hibernate映射(使用了jBoss Documentation)
中的示例<discriminator column="state" type="string"/>
<subclass name="ClassB" discriminator-value="VALUE1">
<join table="b">
<key column="a_id"/>
<property name="amount" column="amount"/>
</join>
</subclass>
当我这样做时,我的xml显示语法错误,指出必须遵循层次结构。
我正在做的是否正确,如果没有,如果有人能告诉我前进的方向会很棒。感谢。
P.S - 表b中的多个条目将具有a_id列。但是,b中只有一行会设置is_valid值,如果我在POJO中得到这一行就足够了
答案 0 :(得分:1)
在我看来,您正在使用鉴别器策略映射每个子类的表。这意味着表a和表b之间存在1 - 1行的相关性,其中表b(子类)的主键也是表a中的外键。
但是,你的映射有点奇怪,因为你有
<key column="a_id" />
通常这应该是
<key column="id" />
并且没有“a_id”列。
但是,您的数据库设计看起来像是一对多关系,而不是子类关系。
如果没有你自己的物品,我真的不能说你想要做什么。
看看继承的hibernate文档。
http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/inheritance.html