2017-05-06 151 views
0

我有類:JPA,從@ManyToMany關係生成的表中獲取數據

@Entity 
public class User { 
    @ManyToMany 
    public List<Role> roles = new LinkedList<>(); 
} 
@Entity 
public class Role { 
} 

JPA/Hibernate生成這些類的三個表:

  • 用戶(ID)
  • 角色(ID )
  • USER_ROLE(USER_ID,ROLE_ID)

現在我想獲得具有具體角色的用戶名單f.e .: role_id = 4

我該如何實現這一目標?沒有像User_Role這樣的實體,所以我會要求數據?

+1

使用查詢:'從用戶選擇不同的U U加入u.roles R其中r.id = 4'。注意:這是一個**列表**的角色,所以命名您的字段「角色」,而不是「角色」。閱讀手冊:https://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html#hql。您還可以將該關聯設爲雙向,通過ID加載該角色,並獲取其用戶列表。所有這些在手冊中都有解釋。 –

+0

感謝指點我本教程的人。太好了。你的答案也很好。有用。如果您可以發佈它作爲答案,我會關閉這個問題。 '角色'拼寫錯誤。 – masterdany88

+1

我會建議你不要使用ManyToMany,但要解散它,以便映射表也是一個實體。如果給你更好的控制,並且還可以給你更好的表現。我建議您通過Hibernate工程師https://vimeo.com/190275665#t=1700之一查看此視頻(如關係部分) –

回答

0

感謝JB Nizet,我已經解決了這個問題。

婁正在代碼:

import play.db.jpa.JPA; 
import javax.persistence.Query; 

public static List<User> findByRole(Role role) { 
    Query query = JPA 
     .em() 
     .createQuery("select distinct u from User u join u.roles r where r.id =:role_id", User.class) 
     .setParameter("role_id", role.id); 
    return query.getResultList(); 
}