2013-06-22 4 views
0

내 응용 프로그램에 Hibernate 3.2.5를 사용하고 있습니다.HQL : 암시 적 연결이 작동하지 않음

나는 Dept 테이블과 Employees 테이블을 가지고 있습니다.

사이 Dept.java

private int deptId; 
private String deptName; 
private Map empMap = new HashMap(); 
//Getters and Setters 

Employees.java

private int empId; 
private String empName; 
private int deptId; 
private int age; 
private String sex; 
private Dept dept; 
//Getters and Setters 

협회이 두 :

<map name="empMap" inverse="false" cascade="all"> 
     <key column="DEPT_ID"></key> 
     <map-key formula="EMP_ID" type="integer"></map-key> 
     <one-to-many class="com.jdbc.Employees"/> 
    </map> 

나는 아래 문을하려고 할 때 :

Query hqlQuery = session.createQuery("from Dept dept where dept.empMap.empName = 'XYZ'"); 

나는 아래의 예외를 얻고있다 :

org.hibernate.QueryException: illegal attempt to dereference collection [dept0_.DEPT_ID.empMap] with element property reference [empName] [from com.jdbc.Dept dept where dept.empMap.empName = 'XYZ']

이 친절하게 나를 암시 여기 조인을 사용하는 방법을 알려 주시기 바랍니다. 의사를 읽으면서 나는 실종 된 것을 알아낼 수 없습니다.

답변

1

속성과 같은 컬렉션에 액세스하려고합니다. 이것을 대신 할 수 있습니다 :

from Dept dept inner join dept.empMap emp where emp.empName = 'XYZ' 
+0

답장을 보내 주셔서 감사합니다. 스레드를 종료하기 전에 한 가지 명확히해야합니다 : Hibernate doc의 HQL 섹션에서이 쿼리를 보았습니다 :'cust.name.firstName from customer as cust'를 선택하십시오.이 쿼리에서'name'이'String' 타입 속성 인 경우 'Customer' 클래스 다음에'firstName'은 무엇입니까? 명확히하십시오. 감사합니다. – user182944

+0

'name'은'String'이 될 수 없습니다. 이것은 컴포넌트 유형, 즉 다른 클래스라고 생각합니다. – lunr

관련 문제