다음 상황을 고려하십시오. 나는 수업 테이블이 있으며 모든 수업에는 요일 (0-6; 날짜가 아님)과 강의가 개최되는 수업 시간 (시간, 하루의 수업 순서 번호, 즉 1에서 10까지). 그리고 특정 요일과 시간 이후에 첫 번째 수업을 찾아야합니다.최대 절전 모드 : OR ORDER BY 절
수업 시간 (월요일 - 금요일) : 월요일 -5, 수요일 -2, 금요일 -1, 금요일 -3.
wednesday-2 이후 강의의 경우 friday-1, friday-3, friday-2 이후, monday-5, friday-5 등이 나타납니다. 따라서 이번 주말에 "오버플로"됩니다. 나는이 쿼리를 해결 I 최대 절전 모드 HQL을 사용하여 하나 개의 프로젝트에서
: 나는 정말 내가 해낸 방법을 기억하지 않지만
SELECT l FROM Lesson l
ORDER BY (l.day > :day OR (l.day = :day AND l.hour >= :hour)),
l.day DESC, l.hour DESC LIMIT 1
놀랍게도,이 정말 일했다. 그것은 진정한 마법입니다.
하지만 지금은 JPA와 최대 절전 모드를 사용하는 다른 프로젝트 (이번에는 Java EE 웹 기반)에서해야합니다. 이 (다시 최대 절전 모드 및 HQL을 사용하여) 같은 일 것입니다 생각, 그것은 예외가 발생합니다 :
그에게 또는 ORDER BY 절을 가리키는org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: OR near line 1, column 101
.
나는 OR ORDER BY 내부가 정말 어색하지만 작동한다는 것을 알고 있으므로 괜찮다고 생각했습니다. 하지만 지금은 그걸로 무엇을 해야할지 모르겠습니다. 그것은 다른 Hibernate 버전이나 JPA의 사용 때문일 수 있습니까? (나는 버전에 대해 모르겠다. 둘 다 Hibernate 3이다.) 두 데이터베이스 모두 MySQL이었다.
어떤 도움을 주셔서 감사합니다 (또는 지정된대로 작동하는 다른 검색어를 제공해 주셔서 감사합니다).
이 방법이 효과적입니다. 감사! 내가 물어보기 전에 IF()를 시도했지만 그 중 하나가 NullPointerException을 던지기 위해 작동하지 않았다. – redhead