comment écrire une requête de jointure en veille prolongée

J’ai créé deux beans User et VirtualDomain avec plusieurs à plusieurs relations

@Entity @Table(name = "tblUser") public class User implements Serializable { private Long id; private Ssortingng username; private Set virtualdomainset; @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.AUTO) public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Column(name = "username", length = 50, nullable = false) public Ssortingng getUsername() { return username; } public void setUsername(Ssortingng username) { this.username = username; } @ManyToMany(targetEntity = VirtualDomain.class, cascade = {CascadeType.PERSIST},fetch=FetchType.EAGER) @JoinTable(name = "tblUserDomainRel", joinColumns = @JoinColumn(name = "userid"), inverseJoinColumns = @JoinColumn(name = "domainid")) public Set getVirtualdomainset() { return virtualdomainset; } public void setVirtualdomainset(Set virtualdomainset) { this.virtualdomainset = virtualdomainset; } } @Entity @Table(name = "tblVirtualDomain") public class VirtualDomain { private Long id; private Ssortingng domainname; private Set userset; @Id @JoinColumn(name = "id") @GeneratedValue(strategy = GenerationType.AUTO) public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Column(name = "domain_name") public Ssortingng getDomainname() { return domainname; } public void setDomainname(Ssortingng domainname) { this.domainname = domainname; } @ManyToMany(cascade = {CascadeType.ALL},fetch=FetchType.EAGER, mappedBy = "virtualdomainset", targetEntity = User.class) public Set getUserset() { return userset; } public void setUserset(Set userset) { this.userset = userset; } } 

comment obtenir des données d’utilisateur comme nom d’utilisateur liées à un domaine particulier via hibernate.

Pour append à la réponse de gid, si pour une raison quelconque vous devez extraire avec empressement une relation d’entités, la syntaxe de la jointure serait alors join fetch.

 from VirtualDomain vd join fetch vd.usersset u where vd.domainname = 'example.com' and u.username like 'foo%' 

Toujours differcult todo HQL avec un système de test … mais on y va:

 select u from VirtualDomain vd join User vd.usersset u where vd.domainname = 'example.com' and u.username like 'foo%' 

Faites-moi savoir comment vous vous en sortez.

Avant d’acheter Intellji, j’ai souvent conseillé d’arrêter l’application dans le débogueur, puis d’utiliser la fenêtre immédiate pour expérimenter HQL.

La documentation d’hibernation sur les jointures a toujours été un peu cryptique à mon avis.