2009-11-25 9 views
0

Supposons il y a trois tables:Comment diviser les données d'une table en deux ensembles basés sur une valeur de colonne avec des mappages Hibernage?

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

et le tableau A et B sont modélisés par les classes A et B comme suit:

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; 
} 

Comment pourrais-je modéliser cela en utilisant Hibernate? Je voudrais être en mesure de faire ce qui suit, mais il semble que les valeurs de la colonne discriminante n'existent pas pour les attributs définis:

<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

À peu près une copie exacte: http://stackoverflow.com/questions/1761901/multiple-manytomany-sets-from-one-join-table – ChssPly76

Répondre

0

Je pense, vous pouvez appliquer la clause where dans la balise set. Hibernate document état comme suit dans le lien suivant http://docs.jboss.org/hibernate/core/3.3/reference/en/html/collections.html

où (facultatif): spécifie une condition SQL WHERE arbitraire qui est utilisée lors de l'extraction ou de la suppression de la collection. Ceci est utile si la collection doit contenir seulement un sous-ensemble des données disponibles.

+0

'where' fonctionne pour les collections en lecture seule ou lorsque vous êtes * * vraiment ** traitant d'un sous-ensemble de données (et peut donc par défaut des colonnes manquantes sur l'insertion). Cela n'aidera pas à maintenir deux collections distinctes basées sur la même table – ChssPly76

0

comme @ ChssPly76 dit ceci est un double de Multiple @ManyToMany sets from one join table

Les solutions il suggère d'utiliser une vue comme join-column et SQL simple pour CRUD opérations.

Cette réponse est marquée wiki communautaire, donc si quelqu'un d'autre veut que cette question quitte la section 'sans réponse', elle peut librement l'augmenter.

Questions connexes