JPA2标准查询JOIN

时间:2011-10-10 04:21:42

标签: jpa-2.0

我有以下课程(实体)

@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);

但我没有得到所有的杂志列表与indate和magdate null.RIGHT JOIN不受支持。怎么了?

3 个答案:

答案 0 :(得分:1)

如果无法更改实体关系,您可以考虑将查询的根目录更改为Magazine并使用与'mag'变量相关的子查询。

答案 1 :(得分:0)

错误的是你确实需要一个正确的联接才能做到这一点。您可以从OneToOneMagazine进行反向MagazineIn关联,并通过左连接从杂志查询到期刊。

答案 2 :(得分:0)

我已经使用杂志

中的集合解决了这个问题
@OneToMany(mappedBy="mag",FETCHTYPE.LAZY)
List<MagazineIn> arrivals