2009-08-26 3 views
1

Je voudrais configurer ce mappage avec des annotations au lieu de XML.Comment réécrire ce mappage hibernate avec des annotations?

Voici la configuration de mappage (aseptisé pour la consommation publique):

<hibernate-mapping package="com.test.model"> 
    <class name="Parent" table="parent"> 

    <composite-id name="id" class="ParentCompositeKey"> 
     <key-property name="first_id" type="long" column="first_id"/> 
     <key-property name="second_id" type="long" column="second_id"/> 
    </composite-id>  

    <set name="parentChildren" table="parent_child" inverse="true" cascade="all"> 
     <key on-delete="cascade"> 
      <column name="first_id"/> 
      <column name="second_id"/> 
     </key> 
     <one-to-many class="Child" /> 
    </set> 

    </class> 
</hibernate-mapping> 

Parent possède une clé primaire composite constitué de deux Long s. Child a une clé primaire composite composée de la clé primaire composite du parent et une clé supplémentaire Long. Lorsque je supprime un Parent, l'intention est également de supprimer les enregistrements associés Child. (Ces enfants ne peuvent tout simplement pas se débrouiller seuls, apparemment.)

Ceci est une relation unidirectionnelle. Du côté Child, je n'ai pas besoin de savoir le Parent. Je suis un peu débutant aux annotations de JPA. J'ai regardé dans les docs et essayé diverses combinaisons de @OneToMany et @JoinTable avec @JoinColumns pour résoudre mon problème jusqu'ici.

Ce question ne me remplit pas d'espoir, mais je me dis que si cela fonctionne en XML, cela devrait être possible avec des annotations.

Un conseil apprécié.

Répondre

2

Voici un lien vers Hibernate Annotations documentation qui couvre la plupart de ce que vous voulez. La cartographie résultant serait quelque chose le long des lignes de:

@Embeddable 
public class ParentCompositeKey implements Serializable { 

    public long getFirstId() { ... } 

    public long getSecondId() { ... } 

    // setters 
} 

@Entity 
public class Parent implements Serializable { 

    @Id 
    public ParentCompositeKey getId() { ... } 

    @OneToMany(cascade=CascadeType.ALL) 
    @JoinColumns ({ 
     @JoinColumn(name="first_id"), 
     @JoinColumn(name="second_id") 
    }) 
    public List getParentChildren() { ... } 

    // setters 
} 

Cela suppose que vous avez joindre aucune table (il est un peu clair de votre schéma de nommage que vous faites). Si vous le faites, cependant, vous devez simplement ajouter une annotation @JoinTable et y déplacer @JoinColumns.

+0

Merci. Cela a vraiment aidé. – Kevin

Questions connexes