使用JPA2 Criteria API选择MAX时间戳

pla*_*nes 29 java generics criteria-api java-ee-6 jpa-2.0

所以我的实体有:

@Column(name="TS", nullable=false)
private java.sql.Timestamp timestamp; 
Run Code Online (Sandbox Code Playgroud)

我生成的MetaModel具有:

public static volatile SingularAttribute<MyEntity,Timestamp> timestamp;
Run Code Online (Sandbox Code Playgroud)

我想通过Max Timestamp值选择:

Root<MyEntity> root = query.from(MyEntity.class);
Expression maxExpression = cb.max(root.get(MyEntity_.timestamp));
Run Code Online (Sandbox Code Playgroud)

但我不被允许,因为:

max(Expression<N> x) 应用数值max运算创建聚合表达式. <N extends java.lang.Number>表达

当然Timestamp不会延伸Number.

如何使用typesafe Criteria API MAXTimestamp列进行操作?

Mik*_*unu 49

而不是max,你必须使用CriteriaBuilder.greatest用于Timestamp(以及Date,String和其他可比对象).如果您需要MIN作为时间戳,那么请使用最少的方法

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

  • lt vs. lessThan
  • le vs. lessThanOrEqualTo
  • ge vs. greaterThanOrEqualTo
  • gt vs. greaterThan