[英]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.