我在休眠中有这样的课程:
@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 但不是 event.name=Delivered 的订单。