不存在具有给定标识符的行

时间:2017-02-25 10:15:01

标签: java oracle hibernate

我有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表中插入日期,它可以正常工作。它只检索产生此错误的数据。 知道我错过了什么吗?自一个星期以来,我一直坚持这个问题。

2 个答案:

答案 0 :(得分:-1)

可能的原因是:

  1. 持久性 - 员工5的数据不会保留。数据 可能是由一个交易输入的,不知怎的 承诺。但是如果另一个事务尝试检索数据 另一个会话,你会得到这个错误。
  2. 交易完成 通过hibernate回滚

答案 1 :(得分:-1)

我不了解java / hibernate,但就Oracle而言,您的查询有多个明显的错误。

  1. 使用表名的别名时,不能使用as。所以你的查询应该是
  2. 您在select子句中没有提到名为it的列。
  3. pojo.ComEmp子句中的表from不存在,因为数据库不知道pojo.ComEmp是什么。
  4. 您应首先在sqlplus / Oracle SQL Developer或任何其他客户端工具中运行查询,以验证查询是否正确。用户硬编码的变量值,以便在适用的情况下运行查询。

    例如,您查询的最接近的工作版本将在下面。不确定您是否要加入任何其他列。

    SELECT it.id FROM corr_comp_emp it 
         inner join V_EMPLOYEE vue 
    on vue.Id = it.Id;