2011-10-10 68 views
1

我有以下類(實體)JPA2條件查詢JOIN

@Entity 
public class Magazine { 
    private int id ; 
    private String magazine; 

      //getters and setters 
} 

// tracking the magazine arrival 
@Entity 
public class MagazineIn { 
    private int id; 
    private java.util.Date inDate; 
    private java.util.Date magdate; 

    @OneToOne 
    private Magazine mag ; 
      //getters and setters 

} 

現在,我想所有的雜誌都到達狀態,使用條件查詢

雜誌是否有或沒有

以下是代碼

CriteriaBuilder cb = em.getCriteriaBuilder(); 
    CriteriaQuery<Object[]> cq = cb.createQuery(Object[].class); 

     Root<MagazineIn> magIn = cq.from(MagazineIn.class); 
    Join<Magazine,MagazineIn> mag = magIn.join("mag" , JoinType.LEFT); 

     cq.multiselect(mag.get("magazine") , magIn.get("magdate") , 
      magIn.get("inDate")); 
    TypedQuery<Object[]> q = em.createQuery(cq); 

但我沒有得到所有的mag不支持嗪與銦酸和magdate null.RIGHT JOIN上市。怎麼了?

回答

1

如果實體關係的變化是不可能的,你可以考慮改變你的查詢雜誌的根源,並使用其相關的「MAG」變量的子查詢。

0

什麼是錯的,你的確會需要一個合適的加入做到這一點。你可以只具有反向OneToOne協會從MagazineMagazineIn,和查詢從雜誌到magazineIn與左連接。

0

我曾在雜誌

@OneToMany(mappedBy="mag",FETCHTYPE.LAZY) 
List<MagazineIn> arrivals 
解決了這個利用集合