使用JPA2 Criteria API选择MAX时间戳

时间:2012-03-08 10:45:12

标签: java generics jpa-2.0 java-ee-6 criteria-api

所以我的实体有:

@Column(name="TS", nullable=false)
private java.sql.Timestamp timestamp; 

我生成的MetaModel有:

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)             应用数值max运算创建聚合表达式。   <N extends java.lang.Number>表达式

当然Timestamp不会延伸Number

如何使用typesafe Criteria API在MAX列上执行Timestamp

1 个答案:

答案 0 :(得分:46)

而不是 max ,您必须使用CriteriaBuilder.greatest作为时间戳(以及日期,字符串和其他可比较对象)。如果您需要MIN作为时间戳,那么请使用最少的方法

类似的问题可以通过更少/更多/相等的比较来面对。第一个接受扩展Number的参数,第二个接受其他可比较的参数: