我有2个pojo。一个pojo表示我的Oracle数据库中的V_EMPLOYEE视图 查看V_EMPLOYEE:
+----------+----------+
| ID | TEMP |
+----------+----------+
| 1 | 0 |
| 2 | 1 |
| 3 | 0 |
| 4 | 1 |
+----------+----------+
TEMP的类型为VARCHAR2(1)
员工POJO如下:
public class EmpPOJO {
private int ID;
private String Temp;
//getters and setters
}
我的另一个pojo代表一个表corr_comp_emp:
+----------+----------+----------+
| ID | ID_COM | ID_EMP |
+----------+----------+----------+
| 1 | 2 | 2 |
| 2 | 3 | 5 |
| 3 | 5 | 6 |
| 4 | 8 | 8 |
+----------+----------+----------+
pojo如下:
public class CorrComEmp {
private int ID;
private EmpPOJO Emp;
private ComPojo com;
//getters and setters
}
我用来获取CorrComEmp列表的查询是:
listE = session.createQuery("SELECT it FROM pojo.CorrComEmp as it, " + V_EMPLOYEE
+ " as vue WHERE vue.Id = it.Emp").list();
每当我的项目遇到上述代码时,都会收到以下错误:
No row with the given identifier exists: 5, of class: pojo.EmpPOJO
员工5出现在视图V_EMPLOYEE中。我注意到在将新属性添加到Employee,TEMP之后我收到此错误。 我试过通过hibernate在corr_comp_emp表中插入日期,它可以正常工作。它只检索产生此错误的数据。 知道我错过了什么吗?自一个星期以来,我一直坚持这个问题。
答案 0 :(得分:-1)
可能的原因是:
答案 1 :(得分:-1)
我不了解java / hibernate,但就Oracle而言,您的查询有多个明显的错误。
as
。所以你的查询应该是it
的列。pojo.ComEmp
子句中的表from
不存在,因为数据库不知道pojo.ComEmp
是什么。您应首先在sqlplus / Oracle SQL Developer或任何其他客户端工具中运行查询,以验证查询是否正确。用户硬编码的变量值,以便在适用的情况下运行查询。
例如,您查询的最接近的工作版本将在下面。不确定您是否要加入任何其他列。
SELECT it.id FROM corr_comp_emp it
inner join V_EMPLOYEE vue
on vue.Id = it.Id;