2009-11-25 19 views
0

假设有三个表:如何使用Hibnernate映射基于列值将表数据分为两组?

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> 
+1

非常精确的重复:http://stackoverflow.com/questions/1761901/multiple-manytomany-sets-from-one-join-table – ChssPly76 2009-11-25 21:58:05

回答

0

我想,你可以申请其中一组标签条款。休眠文档状态如下链接 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/collections.html

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

+0

'where'适用于只读集合或当你* *真正**处理数据的一个子集(因此可以在插入时缺省缺失列)。它不会帮助维护基于同一个表的两个单独的集合 – ChssPly76 2009-11-26 18:12:16

0

为@ ChssPly76说,这是 Multiple @ManyToMany sets from one join table

该解决方案的重复有建议使用一个视图作为连接列和普通的SQL的CRUD操作。

此答案标记为社区wiki,因此如果有人希望这个问题离开'未答复'部分可以自由upvote它。