2010-08-28 18 views
2

J'ai des tables que je veux mapper les unes aux autres. Je veux remplir 2 listes déroulantes: code_r et code_l. Lorsque je choisis une valeur de code_r, code_l ne doit afficher que certains enregistrements. Dans ma base de données j'ai 2 tables:Question de mappage de base Hibernate/JPA

Table code_r 
=================== 
CODE   INT 
LIBELLE  VARCHAR 

Et

Table code_l 
=================== 
ID   BIGINT 
CODE_R_ID INT 
LIBELLE  VARCHAR 

Un code_r peut avoir plusieurs code_l associé (sur la base code_r_id (pas définie comme une clé étrangère dans la définition de code_l .) Bien sûr, un code_l ne peut être associé à un code_r

La requête SQL suivante fonctionne très bien.

SELECT * 
FROM code_r r 
left join `code_l` l on l.code_r_id = r.code; 

Comment dois-je implémenter cela en utilisant les annotations JPA/Hibernate-3.5 dans les classes CodeR et CodeL?

Toute aide serait appréciée. Merci d'avance.

Répondre

2

Avec Hibernate (et maintenant normalisé dans JPA 2.0), vous pouvez utiliser un à plusieurs unidirectionnelle sans table de jointure en utilisant une annotation JoinColumn:

annoter le Coder comme ceci:

@Entity 
public class CodeR { 
    @Id 
    private Integer code; 
    private String libelle; 

    @OneToMany 
    @JoinColumn(name="CODE_R_ID") 
    Set<CodeL> codeLs = new HashSet<CodeL>(): 

    // getters, setters 
} 

Et CODEL

@Entity 
public class CodeL { 
    @Id 
    private Integer id; 
    private String libelle; 

    // getters, setters, equals, hashCode 
} 

Et la requête JPQL:

SELECT r FROM CodeR LEFT JOIN r.codeLs 
+0

+1 pour standardisé @JoinColumn JPA 2.0 sans @JoinTable –

+0

Et félicitations pour vous gagner un badge d'or sur Hibernate –

+0

@Arthur Merci beaucoup, sincèrement apprécié. Next target, JPA :) –

2

dans la classe Coder:

@OneToMany (mappedBy = "code_r_id")

Collection elementsFromL;


dans la classe CODEL:

@ManyToOne

Coder code_r_id;

+0

Merci pour votre réponse :-) M. Q.C – kiwifrog