0

我有以下数据库架构:

table a {
    id,
    state
}

table b {
    id,
    a_id,
    is_valid,
    amount
}

我想要一个休眠映射,只有当 a.state 具有某个值时,我才从表 b 中获取值。这是我拥有的休眠映射(使用jBoss 文档中的示例)

<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 显示一个语法错误,指出必须遵循层次结构。

我所做的是否正确,如果不是,如果有人能告诉我前进的方向,那就太好了。谢谢。

PS - 表 b 中的多个条目将具有 a_id 列。但是 b 中只有一行将设置 is_valid 值,如果我在我的 POJO 中获得这一行就足够了

4

1 回答 1

1

在我看来,您正在使用鉴别器策略为每个子类映射一个表。这意味着表 a 和表 b 之间存在 1 - 1 行相关性,其中表 b(子类)的主键也将是表 a 的外键。

但是,您的映射有点奇怪,因为您有

<key column="a_id" />

通常这应该是

<key column="id" />

并且不会有“a_id”列。

但是,您的数据库设计看起来像是一对多关系而不是子类关系。

如果没有您的对象本身,我真的无法说出您想要做什么。

看看关于继承的休眠文档。

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/inheritance.html

于 2012-06-19T16:18:59.100 回答