我有两个实体(表) - 员工和项目。一个员工可以有多个项目。项目表的 CREATOR_ID 字段是指 Employee 表的 ID 字段。Employee 实体不维护对 Project 的任何引用 - 但 Project 实体具有对 Employee 的引用。
使用 EntityManager 以下查询工作正常 -
entityManager.createQuery(
"select e from EmployeeDTO e, ProjectDTO p"
+ " where p.id = ?1 and p.creator.id=e.id");
但由于我有 LAZY 关联关系,我得到错误:
无法初始化代理 - 没有会话
如果我尝试从 Employee 实体访问项目信息。这是意料之中的,所以我使用 Hibernate 的 Session 来创建查询,如下所示。
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’要么不在 FROM 列表中的任何表中,要么出现在连接规范中,并且超出了连接规范的范围......”
谁能建议这种情况下正确的 JOIN 语法是什么?如果我使用("SELECT * FROM EMPLOYEE_TAB E, ........")
- 它会给出其他错误:
java.lang.ClassCastException:[Ljava.lang.Object;不能转换为 com.im.server.dto.EmployeeDTO
.
提前致谢。