使用JPA2 Criteria API选择MAX时间戳 [英] Select MAX timestamp with JPA2 Criteria API

查看:121
本文介绍了使用JPA2 Criteria API选择MAX时间戳的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我的实体有:

$ 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的参数,第二个是其他可比较的:


  • lt
  • le vs. lessThanOrEqualTo

  • ge与greaterThanOrEqualTo

  • gt vs. greaterThan


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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆