2016-08-05 3 views
2

私はUserエンティティがあります役割実体oneToMany関係が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<>(); 

A:私はJPAプロバイダのように冬眠使用しています

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; 

を。特定の役割を持つユーザーのみを取得したいすべてのユーザーを検索するために名前付きクエリを書きましたが、今では@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を使用して動的クエリを作成するだけです。 –

関連する問題