繁体   English   中英

如何使用JPA的JPQL连接两个表

[英]How to join two tables using JPA's JPQL

好吧我说有两张桌子:

Product_History

product_id  last_update_date
-------------------------------
1           12JAN2012
1           13JAN2012
1           14JAN2012
2           13JAN2012
3           12JAN2012
4           12JAN2012

制品

product_id, product_name
-------------------------
1           Orange
2           Mango
3           Apple
4           Strawberry

产品JPA对象如下所示:

@Entity
@Indexed
@Table(name="Products")
public class Product extends AbstractDomainObject {

    private static final long serialVersionUID = 8619373591913330663L;

    private String product_id;
    private String product_name;

    @Id 
    @Column(name="product_id")
    public Long getProduct_id() {
        return product_id;
    }

    public void setProduct_id(String Product_id) {
        this.Product_id = Product_id;
    }
}

我需要编写一个JPQL查询,以便获取在两个日期之间更新的产品列表。 在普通的SQL中我会做这样的事情:

-- assuming startDate is 13JAN2012 and endDate is 14JAN2012

Select product_name from products where product_id in 
(Select product_id where max(last_update_date) betwen startDate and endDate);

如何为JPA编写等效查询? 我尝试过这样的事,但没有运气。

String queryString = "from Products p, Product_History h where " +
                "product_id = :newId " +
                "and product_id in ( " +
                "Select product_id from product_history + +
                            "where max(last_update_date) between max:startDate and :endDate);

    Query query = entityManager.createQuery(queryString);   
    query.setParameter("newId", 1);
    query.setParameter("startDate", '13JAN2012');   
    query.setParameter("endDate", '14JAN2012'); 

    return query.getResultList();   

您必须使用@OneToMany连接在Product中对product_histroy进行延迟提取,然后使用:

select distinct p from Products p 
where p.productHistory.lastUpdateDate > ? and p.productHistory.lastUpdate < ?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM