programing

Oracle 데이터베이스를 사용하여 HQL 쿼리에서 현재 날짜를 사용하려면 어떻게 해야 합니까?

goodjava 2023. 3. 21. 22:07

Oracle 데이터베이스를 사용하여 HQL 쿼리에서 현재 날짜를 사용하려면 어떻게 해야 합니까?

Hibernate 3과 Oracle 10을 사용하여 이 쿼리를 작성하려고 합니다.

from Alert alert
where alert.expiration > current_date()
order by alert.priority, alert.updated, alert.name

다음과 같은 SQL을 만듭니다.

Hibernate: select alert0_.ANNOUNCEMENTS_ID as ANNOUNCE1_1_, alert0_.ANNOUNCEMENT
S_NAME as ANNOUNCE2_1_, alert0_.ANNOUNCEMENTS_PRIORITY as ANNOUNCE3_1_, alert0_.
ANNOUNCEMENTS_EXPIRATION as ANNOUNCE4_1_, alert0_.ANNOUNCEMENTS_UPDATE_DATE as A
NNOUNCE5_1_ from NYC311_ANNOUNCEMENTS alert0_ where (alert0_.ANNOUNCEMENTS_EXPIR
ATION>current_date()) order by  alert0_.ANNOUNCEMENTS_PRIORITY , alert0_.ANNOUNC
EMENTS_UPDATE_DATE , alert0_.ANNOUNCEMENTS_NAME

분명히 완벽하게 균형 잡힌 괄호가 있을 때 "오른쪽 괄호 누락"과 같은 모든 이상한 오류가 발생합니다.

오라클이 왜 이걸 보고 겁을 먹는거지?HQL 쿼리를 쓰는 더 좋은 방법이 있나요?

그래야 하지 않을까?current_date?

하이버네이트는 그것을 적절한 방언으로 번역할 것이다.

실제 "Hibernate will translate this to that" 레퍼런스 매뉴얼은 찾을 수 없지만 일반적으로 HQL Expressions for Hibernate 4.3에서 확인할 수 있습니다.

다음으로 Java Persistence API 2.0(JPA) 사양이 있습니다.JPA는 Java Persistence Query Language(JPQL)의 표현과 그 의미를 정의합니다.current_date:

4.6.17.2.3 Datetime Functions_datetime:= CURRENT_TIME | CURRENT_TIMESTAMP Datetime 함수는 데이터베이스 서버의 현재 날짜, 시간 및 타임스탬프 값을 반환합니다.

current_date()휴지 상태 기능?

나는 사용할 것이다.sysdate대신.다음과 같습니다.

where alert.expiration > sysdate 

또는 하루 중 시간을 무시하려면:

where alert.expiration > trunc(sysdate) 

언급URL : https://stackoverflow.com/questions/513317/how-do-i-use-the-current-date-in-an-hql-query-with-an-oracle-database