2009-10-28 10 views
7

Czy ktoś może wskazać mi przykład użycia CURRENT_DATE w zapytaniu JPA?Przykład użycia CURRENT_DATE w zapytaniu JPA

CURRENT_DATE jest określony w WZP, ale nie udało mi się go uruchomić. Zawsze otrzymuję wyjątek od unexpected token [CURRENT_DATE]. Ponieważ jest to określone w WZP, wszyscy dostawcy powinni przestrzegać tego prawa?

Używam EclipseLink 2.0 BTW.

Odpowiedz

12

Może być stosowany tak:

Query query = manager 
    .createQuery("SELECT c FROM CITIES c WHERE c.founded = CURRENT_DATE"); 
for (Object city : query.getResultList()) { 
    System.out.println(city); 
} 

... gdzie założył jest rodzajem czasowa:

@Column(name = "FOUNDED") 
    @Temporal(TemporalType.DATE) 
    private Date founded = new Date(); 

Nie świetnym przykładem, ale masz pomysł. Używam Eclipselink 1.1.2

+0

Jesteś naprawdę blisko. Dotarłem tak daleko tuż przed zobaczeniem twojej odpowiedzi. Próbuję zrobić coś takiego, jak Wybierz x z tabeli x gdzie x.id = 1 i (x.lastModified-CURRENT_DATE)> = 365 Potrzebuję użyć obliczenia na datach. – javydreamercsw

+0

Czy jest możliwe wykonywanie arytmetyki datetime przy użyciu JPA? Musiałbyś mieć jakąś funkcję, by zmienić różnicę w dni (a nie minuty, miesiące, millenia itd.). Nie znam żadnych takich funkcji. Wykonaj arytmetyczną datę w Javie, a następnie wybierz porównywanie w stosunku do wynikowego zakresu. – McDowell

+0

Myślę, że jest to usterka lub brakująca funkcjonalność JPA. Będę musiał to zrobić w ten sposób, jak sądzę. Dzięki! – javydreamercsw

3

Jeśli używasz Expression Framework, jest to metoda Expression currentDateDate() na obiekcie Expression (org.eclipse.persistence.expressions.Expression).

+0

Muszę spróbować, ale naprawdę starałem się unikać używania ogólnych zapytań JPA, aby uniknąć zależności od dostawcy trwałości. – javydreamercsw

4

Odpowiedź na to pytanie było pobieranie wartości za pośrednictwem JPA, a następnie zrobić matematyki w zwykłej Java.

Powiązane problemy