web-dev-qa-db-ja.com

JPA2 Criteria APIでMAXタイムスタンプを選択します

だから私のエンティティは:

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

私の生成されたメタモデルは:

_public static volatile SingularAttribute<MyEntity,Timestamp> 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>_式

もちろんTimestampNumberを拡張しません。

タイプセーフCriteria APIを使用してMAX列でTimestampを実行するにはどうすればよいですか?

30
planetjones

maxの代わりに CriteriaBuilder.greatest をタイムスタンプ(および日付、文字列、その他の比較対象)に使用する必要があります。タイムスタンプにMINが必要な場合は、代わりに最小メソッドを使用してください

同様の種類の問題は、より少ない/より大きい/等しい比較で直面する可能性があります。最初の1つはNumberを拡張する引数を受け入れ、2番目の1つは他の比較対象です。

47
Mikko Maunu