2010-11-29 7 views
1

J'ai une question concernant la jointure entre 2 entités utilisant hql.Comment faire une jointure en utilisant hibernate

À partir d'un profil utilisateur, je dois récupérer le nom du rôle associé à ce profil utilisateur. J'ai donc besoin de faire une jointure pour l'obtenir dans la table des rôles.

J'ai la UserProfile de classe suivante:

@Entity 
@Table(name="USER_PROFILES") 
public class UserProfile extends VersionedObject implements Serializable { 

    public static final int CAID_LENGTH = 64; 

    @Column(nullable=false, length=CAID_LENGTH) 
    private String caid; 

    @Column(length=255) 
    private String description; 

    @CollectionOfElements 
    @JoinTable(
     name="USER_ROLES", 
     joinColumns={ 
      @JoinColumn(name="user_id", referencedColumnName="id"), 
      @JoinColumn(name="user_v_no", referencedColumnName="v_no") 
    }) 
    @Column(name="role_id") 
    private Set<Integer> roleIds; 

Voici la classe Role.java:

@Entity 
@Table(name="ROLES") 
public class Role extends VersionedObject implements Serializable { 

    @Column(nullable=false, length=255) 
    private String name; 
    @Column(length=255) 
    private String description; 

    @CollectionOfElements 
    @JoinTable(
     name="ROLES_RIGHTS", 
     joinColumns={ 
      @JoinColumn(name="role_v_no", referencedColumnName="v_no"), 
      @JoinColumn(name="role_id", referencedColumnName="id") 
    }) 

    private Set<Right> rights; 

Savez-vous comment puis-je faire une jointure basée sur le private Set<Integer> roleIds dans le userProfile. Java pour récupérer le rôle associé afin de récupérer le nom?

Merci beaucoup :)

Répondre

0

Je dirais que vous représentez vos tables, au lieu de représenter les relations de l'objet réel du monde. Par cela, je veux dire que vous devez pas mapper l'ID de rôles, mais la classe de rôle réelle.

Ainsi, au lieu de la cartographie ceci:

private Set<Integer> roleIds; 

Essayez de carte ceci:

private Set<Role> roles; 

Vous avez fait correctement pour la Set<Right> rights, donc, ne sais pas pourquoi vous avez mappée plutôt les ID des objets Set<Integer> roleIds. Ensuite, vous devriez pouvoir faire userProfile.roles, en récupérant un ensemble complet de rôles, y compris ses noms.

Questions connexes