我有两个实体(表) - 雇员&项目。员工可以有多个项目。 项目表的CREATOR_ID字段指的是员工表的ID字段。员工实体不为项目维护任何参考 - 但项目实体具有员工参考。如何使用JOIN使用Hibernate的session.createSQLQuery()
使用的EntityManager下面的查询工作正常 -
entityManager.createQuery(
"select e from EmployeeDTO e, ProjectDTO p"
+ " where p.id = ?1 and p.creator.id=e.id");
但因为我有LAZY关联关系,我得到错误:
Could not initialize proxy - no Session
,如果我尝试从雇员实体项目信息。这是预期的,所以我使用Hibernate的会话来创建查询,如下所示。
Session session = HibernateUtil.getSessionFactory().openSession();
org.hibernate.Query q = session.createSQLQuery(
"SELECT E FROM EMPLOYEE_TAB E, PROJECT_TAB P WHERE P.ID = "
+ projectId + " AND P.CREATOR_ID = E.ID")
.addEntity("EmployeeDTO ", EmployeeDTO.class)
.addEntity("ProjectDTO", ProjectDTO.class);
但我得到这样的错误:“列‘E’是不是没有在任何表格从列表或指定一起出现内和 是加入规范的范围之外......”
任何人都可以提出什么是这种情况下正确的JOIN语法?如果我使用("SELECT * FROM EMPLOYEE_TAB E, ........")
- 它会给出其他错误:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.im.server.dto.EmployeeDTO
。
在此先感谢。
我收到错误:“语法错误:遇到”哪里“在第1行,列52”两种情况。对于第一种情况,我的查询是:“SELECT DISTINCT P FROM ProjectDTO P join P.Creator where P.id = 1”。 “创建者”是“ProjectDTO”类的成员:“EmployeeDTO”。 – javauser71 2011-01-16 18:18:09