2016-08-05 26 views
2

我有用戶實體:如何獲得實體時一對多關係使用Hibernat過濾器中包含的值

public class User implements IStandarizedEntity { 

private static final long serialVersionUID = 1L; 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Basic(optional = false) 
@Column(name = "id") 
private Long id; 

@ManyToMany(fetch = FetchType.LAZY) 
@JoinTable(name = "web.user_role", 
     joinColumns = { 
      @JoinColumn(name = "user_id", referencedColumnName = "id")}, 
     inverseJoinColumns = { 
      @JoinColumn(name = "role_id", referencedColumnName = "id")}) 
@Size(min = 1, max = 10) 
private List<Role> roles = new ArrayList<>(); 

一個角色實體:

public class Role implements IStandarizedEntity { 

private static final long serialVersionUID = 1L; 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Basic(optional = false) 
@Column(name = "id") 
private Long id; 

@Column(name = "type") 
@Enumerated(EnumType.STRING) 
private ERole type; 

我使用休眠像JPA提供商。我只想獲得具有特定角色的用戶。我編寫了命名查詢來檢索所有用戶,現在我試圖使用@Filter僅檢索具有指定角色類型的用戶。
我的成就是我可以檢索所有用戶,然後加載角色我可以加載過濾的角色列表,但它不是我想要做的。

感謝您的任何幫助。

問候, 塞巴斯蒂安

回答

1

查詢時,你可以過濾作用。 例如:

Select u from User u join fetch u.roles r where r.type = :roleType; 

加入取將返回所有用戶與角色的匹配過濾。

+0

嗨,感謝您的回覆,但我必須有時做過濾,有時不會。這取決於我從前端得到的要求。我認爲要通過session.enableFilter()進行過濾時需要過濾,並使用@Filter指定過濾。 –

+0

你可以看看[這裏](http://stackoverflow.com/questions/6919686/annotation-to-filter-results-of-a-onetomany-association)來了解如何實現。對我而言,我將使用CriteriaQuery創建一個動態查詢。 –

相關問題