J'ai 3 tables, Role[roleId, roleName]
, Token[tokenID, tokenName]
& ROLETOKENASSOCIATION[roleId, tokenID]
. Le 3ème a été créé automatiquement par hibernate. Maintenant, si j'écris simplement une requête pour obtenir tous les objets des moyens de la classe Role, cela donne tous les objets de rôle avec le tokenID associé & tokenName. Je voulais juste que l'association soit unidirectionnelle. i.e.: Rôles ---> Jetons Ainsi, l'annotation dans la classe de rôle ressemble,Comment écrire une requête HQL pour plusieurs associations?
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int roleId;
private String roleName;
@ManyToMany
@JoinTable(name="ROLE_TOKEN_ASSOCIATION",
joinColumns={@JoinColumn(name="roleId")},
inverseJoinColumns={@JoinColumn(name="tokenID")})
private List<Token> tkns;
//Getters & Setters
Maintenant, je veux les tokenNames pour la RoleId spécifique. D'abord j'ai fait une requête comme ceci SELECT tkns.tokenName FROM Role WHERE Role.roleId=:roleId
Mais, j'ai fini avec une erreur de déréférencement.
Puis j'ai changé la requête en SELECT tkns FROM Role r WHERE r.roleId=:roleId
Maintenant, j'ai ce que je voulais. Mais il est livré avec roleId aussi.
Comment dois-je obtenir tokenName lui-même? En fait, mon problème est résolu, mais je voudrais savoir comment le faire.
Cela va être utile pour moi, si quelqu'un explique la construction de la requête.
Toutes les suggestions !!
En fait, je suis nouveau mise en veille prolongée et HQL. Il serait utile pour moi si vous expliquez la requête !!! –
@NooB: mise à jour. – axtavt