Hibernate Named Query - junte-se a 3 tabelas
Tenho 3 beans: Organização, Função, Usuário
Role - Relação de organização - @ ManyToOne
Role - Relação de usuário - @ ManyToMany
Organização
@Entity
@Table(name = "entity_organization")
public class Organization implements Serializable {
private static final long serialVersionUID = -646783073824774092L;
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
Long id;
String name;
@OneToMany(targetEntity = Role.class, mappedBy = "organization")
List<Role> roleList;
...
Função
@Entity
@Table(name = "entity_role")
public class Role implements Serializable {
private static final long serialVersionUID = -8468851370626652688L;
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
Long id;
String name;
String description;
@ManyToOne
Organization organization;
...
Do utilizador
@Entity
@Table(name = "entity_user")
public class User implements Serializable {
private static final long serialVersionUID = -4353850485035153638L;
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
Long id;
@ManyToMany
@JoinTable(name = "entity_user_role",
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"))
List<Role> roleList;
...
Então, preciso obter todas as organizações para o usuário especificado (primeiro, preciso selecionar todas as funções de usuário e depois selecionar todas as organizações que possuem essa função)
Tenho uma instrução sql que realiza essa lógica (por exemplo, escolho o usuário com id = 1):
SELECT * FROM entity_organization AS o
INNER JOIN entity_role r ON r.organization_id = o.id
INNER JOIN entity_user_role ur ON ur.role_id=r.id
WHERE ur.user_id = 1
Como posso implementar isso, usando o mecanismo de consulta nomeado de hibernação? Obrigado