2011-07-03 32 views
6

Tôi đã những 2. Đối tượngXây dựng JPA truy vấn cho một mối quan hệ OneToMany

Class A { 
    @OneToMany(mappedBy="a") 
    private List<B> bs; 
} 

Class B { 

    @ManyToOne 
    private A a; 

    private String name; 
} 

1) Tôi muốn xây dựng một truy vấn mà nói được tất cả rằng có ít nhất một B với name = "mohamede1945"

Một

2) Tôi muốn tạo truy vấn cho biết tất cả A không có bất kỳ B nào có tên = "mohamede1945"

Có ai giúp tôi không?

+0

giải pháp của tôi có trả lời được câu hỏi của bạn không? –

+0

Vâng, cảm ơn bạn! – mohamede1945

Trả lời

9

Bạn có thể sử dụng BẤT K and và TẤT CẢ các cấu trúc để lọc truy vấn phụ. Vì vậy, một cái gì đó giống như

1. FROM A aEntity WHERE 'mohamede1945' = ANY (SELECT bEntity.name FROM aEntity.bs bEntity) 

2. FROM A aEntity WHERE 'mohamede1945' <> ALL (SELECT bEntity.name FROM aEntity.bs bEntity) 
+0

http://download.oracle.com/docs/cd/E11035_01/kodo41/full/html/ejb3_langref.html#ejb3_langref_all_any – illEatYourPuppies

10

Trước hết, tôi nghĩ bạn có thể tìm hiểu những câu trả lời bằng cách nhìn vào liên kết này và tìm kiếm THAM GIA: http://download.oracle.com/docs/cd/E11035_01/kodo41/full/html/ejb3_langref.html

Thứ hai, đây là cách tiếp cận của tôi:

@Entity 
@NamedQueries({ 
@NamedQuery(name="A.hasBName",query="SELECT a FROM A a JOIN a.b b WHERE b.name = :name"), 
@NamedQuery(name="A.dontHasBName",query="SELECT a FROM A a JOIN a.b b WHERE b.name <> :name") 
}) 
Class A { /* as you defined */ } 

Trong bạn DAO, bạn có thể đặt tên như sau:

public List<A> findByHasBName(String name){ 
    Query q = em.createNamedQuery("A.hasBName") 
      .setParameter("name", name); 
    try{ 
     return ((List<A>) q.getResultList()); 
    } catch (IndexOutOfBoundsException e){ 
     return null; 
    } 
} 
+0

Cảm ơn rất nhiều. Truy vấn đầu tiên hoạt động tốt với tôi. Tôi đã thử điều này trước đây và nó không hoạt động. – mohamede1945

+0

Cái thứ hai không hoạt động? Hay bạn có ý nghĩa gì? – illEatYourPuppies

+0

CHỌN TỪ A THAM GIA ab b Ở ĐÂY b.name <>: tên không hoạt động – mohamede1945

Các vấn đề liên quan