2011-06-08 17 views
7

Bir ilişki ile eşlenen döndürür:OneToMany hazırda kriterleri çiftleri

@Entity 
public class Parent 
{ 
... 
    @Id 
    @Column(name = "parent_id") 
    private Long id; 

    @OneToMany(mappedBy = "parent") 
    @OrderBy("id") 
    private List<Child> children; 
... 
} 

@Entity 
public class Child 
{ 
... 
    @Id 
    @Column(name = "child_id") 
    private Long id; 

    @ManyToOne 
    @NotFound(action = NotFoundAction.IGNORE) 
    @JoinColumn(name = "parent_id") 
    private Parent parent; 

    @Column 
    private Boolean enabled; 
... 
} 

bir veya daha fazla Child varlıkları ile içeren Parent tarafın bütün bir listesini geri Kriterleri API kullanmak isteyen enabled=false özniteliği. Eşlenen children koleksiyonunun sorgu tarafından filtrelenmesini istemem. Ancak

Criteria crit = session.createCriteria(Parent.class); 
crit.createCriteria("children").add(Restrictions.eq("enabled", false)); 
List<Parent> result = crit.list(); 
return result; 

: Şimdiye kadar aşağıdaki kriterler sorgu kullanıyorum

Parent A 
    - Child A enabled=true 
    - Child B enabled=false 

Parent B 
    - Child A enabled=false 
    - Child B enabled=false 

:

Parent A 
    - Child A enabled=true 
    - Child B enabled=false 

Parent B 
    - Child A enabled=false 
    - Child B enabled=false 

Parent C 
    - Child A enabled=true 
    - Child B enabled=true 

sorgu aşağıdaki dönmelidir: Aşağıdaki Verilen örnek için

,

eşdeğerini döndürüyor
Parent A 
    - Child A enabled=true 
    - Child B enabled=false 

Parent B 
    - Child A enabled=false 
    - Child B enabled=false 

Parent B 
    - Child A enabled=false 
    - Child B enabled=false 

Yani, bu her çocuk elemanı için (nüfuslu çocuk koleksiyonu ile) tek üst kaydı dönüyor enabled=false

kimse sadece bu senaryoda eşsiz ebeveyn elemanlarını döndürmek için nasıl biliyor mu?

Tavsiye edilir, s.

cevap

12

distinct, örn.

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 

sizin durumda çalışmalıdır

İlgili konular