2011-01-18 3 views
0

최대 절전 모드에서 session.getNamedQuery (QUERY_NAME)을 실행하면 명명 된 쿼리가 저장된 hbm.xml 파일의 이름을 전달할 필요가 없습니다. hbm.xml의 이름은 cfg 파일에 언급되어 있습니다.최대 절전 명명 된 쿼리

명명 된 쿼리에 대해 5 개의 hbm.xml 파일이 있고 쿼리 이름 (예 : 모든 5 개의 파일에서 동일한 QUERY_NAME)과 충돌하는 이름이 있으면 최대 절전 모드로 문제를 해결할 수 있습니까?

직관적으로 session.getNamedQuery (QUERY_NAME)을 수행하기 전에 직관적으로 나타납니다. 쿼리가 작성된 특정 hbm.xml 파일을 명시 적으로로드해야합니다.

답변

1

Hibernate는 하나의 논리적 인 네임 스페이스 아래로드 된 모든 hbm 파일에서 모든 명명 된 쿼리를 집계합니다. 이름이 키이지만 put (..) 전에 키에 대한 중복 확인이있는 Map으로 생각하십시오. 따라서 이름은 주어진 세션 팩토리에서 고유해야합니다. 따라서 모든 명명 된 쿼리가 고유한지 확인하십시오. 판게아의 대답에 추가

+0

감사합니다. 이것은 당신의 의견에 직관적 인 기능입니까? 즉, Java 코드에서 명명 된 쿼리 참조를 발견하면 각각의 모든 매핑 파일을 검사해야합니다. – Victor

+0

이것은 fail fast bahavior를 보여줍니다. 이것은 중복 이름을 찾았을 때 hibernate cfg가 startup ex를 던질 때를 의미합니다. 그래,이게 직관적이야. –

0

: 당신이 다른 .hbm.xml 파일에서 동일한 쿼리의 다른 버전을 가지고 그들 사이에서 선택하려는 경우, 당신은 단지 할 수 있지만합니다 (SessionFactory를 구성 할 때 Configuration.addFile()/Configuration.addInputStream()를 호출하여 작업을 수행 할 수 있습니다 SessionFactory 초기화 중 한 번, 즉석에서 변경할 수 없도록).

0

비록 이것이 직접적으로 문제를 다루지는 않지만, 이름 충돌을 피하기 위해 다루는 패키지와 엔티티를 반영하는 쿼리 이름을 제공하는 것이 일반적입니다. "findUser"대신 "com.myproject.domain.User.findByUsernameAndPassword"와 같은 것이 있습니다.

관련 문제