【发布时间】:2014-05-01 05:56:15
【问题描述】:
我有一个实体,其实体名为 Deadline,与名为 DeadlineDate 的实体具有@OneToMany 关系。
截止日期:
@Entity
@Table(name="deadline")
@Cache(alwaysRefresh=true)
public class Deadline implements Serializable {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
@Column(name = "id", nullable = false)
private Long id;
@OneToMany(mappedBy = "deadline", cascade = PERSIST)
@OrderBy("id ASC")
private List<DeadlineDate> datesList = new ArrayList<DeadlineDate>();
//...
}
DeadlineDate 实体:
@Entity
@Table(name="deadlinedate")
public class DeadlineDate implements Serializable {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id")
private Long id;
@Basic
@Column(name = "date", nullable = false)
@Temporal(DATE)
private Date date;
@ManyToOne
@JoinColumn(nullable = false, name = "deadline_id")
private Deadline deadline;
//...
}
getAllDeadlines 方法:
private List<Deadline> getAllDeadlines(){
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Deadline> query = criteriaBuilder.createQuery(Deadline.class);
Root<Deadline> root = query.from(Deadline.class);
Join<Deadline, DeadlineDate> joinDeadDate = root.join("datesList");
List<Predicate> predicateList = new ArrayList<Predicate>();
Date date = new Date();
//other unrelated predicates
//i'm stuck here - begin
predicateList.add( criteriaBuilder.lessThan(joinDeadDate.<predicateArray>get("date"), date));
//i'm stuck here - end
Predicate[] predicateArray = new Predicate[predicateList.size()];
predicateList.toArray(predicateArray);
query.where(predicateArray);
TypedQuery<Deadline> typedQuery = em.createQuery(query);
return typedQuery.getResultList();
}
我想查询已超过当前系统日期的截止日期。截止日期具有存储用户所做更改的历史记录(到期日期可以向前或向后修改)。当前截止日期被认为是截止日期表中最大的 id。我正在尝试使用 Criteria api,但不知道如何使其仅返回 datesList 的最后一个值,以便在 criteriaBuilder 的 lessThan 方法中使用。使用当前代码,我获得了特定截止日期的所有截止日期记录。
提前致谢!
【问题讨论】:
标签: java hibernate jpa criteria-api