2017-03-17 8 views
0

リストにある子からの値でエンティティをフィルタリングする際に問題が発生しました。 例:仕様付きJPA - 子コレクションコンテンツでエンティティをフィルタリングする方法

Specification specs = new Specificatrion(){ 
     @Override 
     public Predicate toPredicate(Root<Father> root, CriteriaQuery<?> query, final CriteriaBuilder cb){ 
      Root<Child> childRoot = query.from(Child.class); 
      Path<?> path = childRoot.get(Child_.school.name); 
      Predicate pred = exp.in("School Name"); 
      return cb.and(pred); 
     } 
} 

ことができます:

public class Father(){ 
    private String name; 
    private Set<Child> childs; 
} 
public class Child(){ 
    private String name; 
    private Integer age; 
    private School school; 
} 
public class School(){ 
    private String name; 
} 

私はこれは私がやったことですが、正常に動作していないすべての父の学校Xに子供を持つことに

をフィルタリングしたいのですが私はこれを手伝ってくれますか? ありがとう!

答えて

0

あなたは子供と父親との間に逆の関係を持っていなければならないので、子供は学校と父親の間を橋渡しすることができます。このような

何かが動作します:

@Entity 
public class Father { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String name; 

    @OneToMany(mappedBy = "father", cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    private Set<Child> childs = new HashSet<>(); 


@Entity 
public class Child { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String name; 
    private Integer age; 

    @ManyToOne(cascade=CascadeType.ALL) 
    private Father father; 

    @OneToOne(cascade = CascadeType.PERSIST) 
    private School school; 

は、その後、あなたのFatherRepositoryに:

@Query("select father from Child child join child.father father join child.school school where school.name=:school") 
List<Father> findBySchool(@Param("school") String school); 
+0

こんにちはエセックス、 私は仕様を使用したいと思います。 変更を試み、何が起こるかを確認します。 ありがとう! –

+0

仕様を使用することはできますが、あなたの質問に設定したように階層を持つことはできません。間違っていることが分かりました。 –