У меня есть классы в спящем режиме, например:
@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;
}
Мне нужно создать DetachedCriteria в порядке от MyPattern (структура деталей не важна).Я частично это реализовал, но теперь моя проблема состоит в том, чтобы выбрать только те Ордера, которые имеют самое новое событие.имя, как в шаблоне.Я думаю, что выбор строки с ближайшей датой поможет, но я просто не могу понять, как это сделать в критериях.Так что я открыт для решений и помощи.Спасибо
редактировать: у меня есть запрос, который заказ.Я должен ответить с правильным экземпляром заказа (в соответствии с содержанием шаблона).Например: клиент запрашивает только те заказы, которые уже были отправлены.Поэтому мне нужно выбрать «Ордера» с самым последним событием с именем «Shipped».
DetachedCriteria dc=DetachedCriteria.forClass(Order.class,"or").CreateAlias("events","eve");
dc.add(Restriction.eq("eve.name","Shipped"));
orders=dc.getExecutableCriteria(session).list();
Basicky, этот код должен сработать, но у него есть один БОЛЬШОЙ недостаток.Он возвращает даже заказы, которые были «доставлены», потому что события в Order is List, который содержит каждое событие в заказе.Так что, может быть, просто исправить, как «выбрать заказы, у которых есть event.name = Отправлено, но НЕ event.name = Доставлено.