je les classes suivantes disposées comme si:comment écrire une requête hql pour la relation hibernate OneToMany?
class User {
@Id
private long id;
@OneToMany(fetch = FetchType.EAGER,cascade = CascadeType.ALL)
Set<UserRole> userRoles;
}
class UserRole {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private int id;
@Column(name = "role", nullable = false, length = 45)
private String role;
}
Je tente d'interroger pour les utilisateurs qui ont un rôle spécifique (dans ce cas, tous les utilisateurs avec le ROLE_ADMIN rôle), en utilisant la requête suivante:
org.hibernate.query.Query<User> userQuery=session.createQuery("from User as mc where mc.userRoles in (from UserRole as ur where ur.role in (:uRoles))",User.class);
Set<String> roles = new HashSet<String>();
roles.add("ROLE_ADMIN");
userQuery.setParameterList("uRoles", roles);
List<User> admins = userQuery.getResultList();
Cependant, la requête ne renvoie aucun résultat.
'Set rôles = new HashSet ()' est ce que l'utilisation des rôles ici? Et d'où vient l'argument 'userRoles'? –
msagala25
userRoles était une faute de frappe. Pardon. 'Set roles' contient une liste de tous les rôles que je recherche dans ce cas précis, il est juste ROLE_ADMIN mais il pourrait être ROLE_ADMIN et ROLE_WRITER par exemple –
AHAW