2012-03-08 10 views
21

Więc moja jednostka posiada:Wybierz MAX datownik z kryteriami JPA2 API

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

Moja generowane metamodel posiada:

public static volatile SingularAttribute<MyEntity,Timestamp> timestamp; 

Chcę wybrać wartością Max Timestamp:

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

Ale nie wolno mi, ponieważ:

max(Expression<N> x) Utwórz wyrażenie zagregowane, stosując numeryczną operację max. <N extends java.lang.Number> Ekspresja

Oczywiście Timestamp nie rozciąga Number.

Jak mogę zrobić MAX w kolumnie Timestamp przy użyciu API Criteria typesafe?

Dzięki.

Odpowiedz

39

Zamiast max trzeba użyć CriteriaBuilder.greatest dla znacznika czasu (oraz dla daty, ciągu i innych komplementów). A jeśli kiedykolwiek potrzeba min dla datownika, a następnie za pomocą metody najmniejszych zamiast

Podobny rodzaj problemu można się zmierzyć z mniej/większe/równe porównań. Jodły przyjmie tezę, że rozciąga się numer, drugie jest w przypadku innych porównywalnych:

  • LT porównaniu lessthan
  • le w porównaniu lessThanOrEqualTo
  • GE porównaniu greaterThanOrEqualTo
  • GT porównaniu greaterThan
+1

Dzięki Mikko - tęskniłem za tym w dokumentach API. – planetjones

+0

sub.where (cb.greatest (histories.get ("activeDate"))); [BŁĄD] wymagane: javax.persistence.criteria.Expression [BŁĄD] znaleziono: javax.persistence.criteria.Path [ERROR] powód: wywnioskowany typ nie pasuje do górnej granicy (s) –

Powiązane problemy