如何根据具有Hibernate映射的列值将表的数据拆分为两组?

时间:2009-11-25 21:51:29

标签: java hibernate

假设有三个表:

Table A (ID, NAME)
Table B (ID, NAME)
Table A-B (A_ID, B_ID, Boolean_Property)

和表A和B按类A和B建模如下:

public class A {
    private long id;
    private String name;

    // All the B's that belong to A where the boolean property is True
    Set<B> trueBSet;

    // All the B's that belong to A where the boolean property is False
    Set<B> falseBSet;
}

public class B {
    private long id;
    private String name;
}

我如何使用Hibernate建模?我希望能够执行以下操作,但似乎设置属性不存在鉴别器列值:

<class name="A" table="A">
    <id name="id" column="ID">
        <generator class="native" />
    </id>

    <property name="name" column="NAME" />

    <set name="trueB" table="A-B">
        <key column="A_ID"/>
        <many-to-many column="B_ID" class="B"/>
        <discriminator column="Boolean_Property" value="True" />
    </set>

    <set name="falseB" table="A-B">
        <key column="A_ID"/>
        <many-to-many column="B_ID" class="B"/>
        <discriminator column="Boolean_Property" value="False" />
    </set>
</class>

2 个答案:

答案 0 :(得分:0)

我认为,你可以在set标签中应用where子句。 Hibernate文档状态如下所示 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/collections.html

其中(可选):指定检索或删除集合时使用的任意SQL WHERE条件。如果集合只需要包含可用数据的子集,则此选项非常有用。

                 

                 

答案 1 :(得分:0)

正如@ ChssPly76所说这是重复的 Multiple @ManyToMany sets from one join table

那里的解决方案建议使用视图作为连接列和普通SQL进行CRUD操作。

此答案标记为社区维基,因此,如果其他人想要将此问题留下,则“未答复”部分可以自由地进行投票。