【发布时间】:2014-09-16 05:49:26
【问题描述】:
我正在尝试使 JPQL 查询正常工作,但似乎无法正确完成。
我有 2 个实体类,Product 和 Pack。一个产品可以有几个包(可能没有),每个包都有一个有效期。 我正在尝试编写一个返回产品 ID、包装 ID 和到期日期的查询,但仅适用于最近到期的包装,并且仅当到期日期介于两个值之间时。
下面的简化代码:
@Entity
public class Product {
@Id
long id;
@OneToMany(fetch=FetchType.EAGER, mappedBy="product", cascade={CascadeType.ALL})
Set<Pack> packs;
}
public class Pack {
@Id
long id;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="product_id", nullable=false)
Product product;
@Temporal(TemporalType.DATE)
Date expiryDate;
}
我的 JPQL 如下:
"select pk.product.id, pk.id, MAX(pk.expiryDate) as maxExpiry from " + Pack.class.getName() + " pk left join pk.product pr group by pp.id"
我认为这行得通,但是如果我这样做,添加第二个限制会失败,并在 mysql 中出现“不正确使用 group by”错误:
"select pk.product.id, pk.id, MAX(pk.expiryDate) as maxExpiry from " + Pack.class.getName() + " pk left join pk.product pr where MAX(pk.expiryDate) between :start and :end group by pp.id"
谁能帮我将这两个限制合并到一个查询中?谢谢。
【问题讨论】: