使用 JPA2 Criteria API 选择 MAX 时间戳
Posted
技术标签:
【中文标题】使用 JPA2 Criteria API 选择 MAX 时间戳【英文标题】:Select MAX timestamp with JPA2 Criteria API 【发布时间】:2012-03-25 20:39:57 【问题描述】:所以我的实体有:
@Column(name="TS", nullable=false)
private java.sql.Timestamp timestamp;
我生成的元模型有:
public static volatile SingularAttribute<MyEntity,Timestamp> timestamp;
我想按 Max Timestamp 值选择:
Root<MyEntity> root = query.from(MyEntity.class);
Expression maxExpression = cb.max(root.get(MyEntity_.timestamp));
但我不被允许,因为:
max(Expression<N> x)
创建应用数值最大运算的聚合表达式。<N extends java.lang.Number>
表达式
当然Timestamp
不会扩展Number
。
如何使用 typesafe Criteria API 在Timestamp
列上执行MAX
?
【问题讨论】:
【参考方案1】:应该使用CriteriaBuilder.greatest 代替max 作为时间戳(以及日期、字符串和其他可比较对象)。如果您需要 MIN 作为时间戳,请改用最少方法
类似的问题可能会面临更少/更大/相等的比较。第一个接受扩展 Number 的参数,第二个接受其他可比较的参数:
lt 与 lessThan le 与 lessThanOrEqualTo ge 与 greaterThanOrEqualTo gt 与 greaterThan【讨论】:
sub.where(cb.greatest(histories.get("activeDate"))); [ERROR] required: javax.persistence.criteria.Expression以上是关于使用 JPA2 Criteria API 选择 MAX 时间戳的主要内容,如果未能解决你的问题,请参考以下文章