使用JPA2 Criteria API选择MAX时间戳 [英] Select MAX timestamp with JPA2 Criteria API
问题描述
所以我的实体有:
$ p $ @Column(name =TS,nullable = false)
private java.sql.Timestamp timestamp;
我生成的MetaModel有:
public static volatile SingularAttribute< MyEntity,Timestamp>时间戳;
我想通过最大时间戳值选择:
根< 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
。
如何在时间戳
上执行 MAX
使用类型安全Criteria API的列?
谢谢。
max ,您必须使用 CriteriaBuilder.greatest 为时间戳(以及日期,字符串和其他可比较物)。如果你需要MIN作为Timestamp,那么使用least方法而不是
类似的问题可能面临较少/较大/相等的比较。第一个接受扩展Number的参数,第二个是其他可比较的:
So my entity has:
@Column(name="TS", nullable=false)
private java.sql.Timestamp timestamp;
My generated MetaModel has:
public static volatile SingularAttribute<MyEntity,Timestamp> timestamp;
I want to select by the Max Timestamp value:
Root<MyEntity> root = query.from(MyEntity.class);
Expression maxExpression = cb.max(root.get(MyEntity_.timestamp));
But I am not allowed because:
max(Expression<N> x)
Create an aggregate expression applying the numerical max operation.<N extends java.lang.Number>
Expression
Of course Timestamp
does not extend Number
.
How can I do a MAX
on a Timestamp
column using the typesafe Criteria API ?
Thanks.
Instead of max you have to use CriteriaBuilder.greatest for Timestamp (and for Date, String and other Comparables as well). And if you ever need MIN for Timestamp, then use least method instead
Similar kind of issue can be be faced with less/greater/equal comparisons. Firs one accepts argument that extends Number, second one is for other comparables:
- lt vs. lessThan
- le vs. lessThanOrEqualTo
- ge vs. greaterThanOrEqualTo
- gt vs. greaterThan
这篇关于使用JPA2 Criteria API选择MAX时间戳的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!