【发布时间】:2011-08-20 21:26:19
【问题描述】:
我在休眠中有这样的类:
@Entity
class Order{
private MyPattern pat;
@Id
private int id;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "order_id")
private List<Event> events;
public DetachedCriteria getCriteria() {
//here I create criterias
}
}
@Entity
class Event{
@Column
@Temporal(value = javax.persistence.TemporalType.DATE)
private Date date;
@Id
private int id;
@Column
private String name;
}
我需要的是从 MyPattern 中按顺序创建 DetachedCriteria(细节结构并不重要)。我已经部分实现了这个,但我现在的问题是只选择具有最新 event.name 的订单,比如模式中的一个。我想也许选择带有 nevest 日期的行会有所帮助,但我只是想不通,如何在 Criteria 中做到这一点。所以我愿意接受解决方案和帮助。谢谢
编辑: 我有要求,即订单。我必须用正确的 Order 实例来响应(根据模式的内容)。例如:客户只请求已经发货的订单。所以我需要选择具有名称为“已发货”的最新事件的订单。
DetachedCriteria dc=DetachedCriteria.forClass(Order.class,"or").CreateAlias("events","eve");
dc.add(Restriction.eq("eve.name","Shipped"));
orders=dc.getExecutableCriteria(session).list();
Basicky 这段代码应该可以解决问题,但它有一个很大的缺陷。它甚至会返回“已交付”的订单,因为订单中的事件是列表,其中包含订单中的每个事件。因此,也许可以进行简单的修复,例如“选择具有 event.name=Shipped 但 NOT event.name=Delivered 的订单。
【问题讨论】:
标签: java hibernate criteria detachedcriteria