【问题标题】:No row with the given identifier exists不存在具有给定标识符的行
【发布时间】:2017-02-25 10:15:01
【问题描述】:

我有 2 个 pojo。一个 pojo 代表我的 Oracle 数据库中的一个视图 V_EMPLOYEE。
查看 V_EMPLOYEE:

+----------+----------+
| ID       | TEMP     |
+----------+----------+
| 1        |    0     |
| 2        |    1     |
| 3        |    0     |
| 4        |    1     |
+----------+----------+

TEMP 的类型为 VARCHAR2(1)

Employee 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 后出现此错误。 我尝试通过休眠在 corr_comp_emp 表中插入日期,它可以正常工作。它只是检索给出此错误的数据。 知道我缺少什么吗?一周以来,我一直被这个问题困扰。

【问题讨论】:

  • 你的问题很混乱。您的查询选择了一个未知实体 ComEmp,但您说它应该返回 List。它使用未知常量 V_EMPLOYEE。不遵守命名约定。请通过正确提供所有 eccessary 详细信息并选择更好的命名来重新处理您的问题。例如,您的实体的EmployeeCompanyContract 有什么问题?此外,您说 ID 为 5 的行存在,但您的表格屏幕截图显示它不存在。再次,非常混乱。

标签: java oracle hibernate


【解决方案1】:

可能的原因有:

  1. 持久性 - 员工 5 的数据未持久化。数据 可能是由一笔交易输入的,但不知何故没有 坚定的。但是如果另一个事务尝试检索数据 另一个会话,您将收到此错误。
  2. 进行的交易 通过休眠正在回滚

【讨论】:

    【解决方案2】:

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

    1. 使用别名作为表名时,不能使用as。所以你的查询应该类似于
    2. 没有您在 select 子句中提到的名为 it 的列。
    3. from 子句中的表pojo.ComEmp 不存在,因为数据库不知道pojo.ComEmp 是什么。

    您应该首先在 sqlplus/Oracle SQL Developer 或任何其他客户端工具中运行您的查询,以验证查询是否正确。用户硬编码变量值以在适用的情况下运行查询。

    例如,您的查询最接近的工作版本将如下所示。不确定您是否想加入任何其他专栏。

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

    【讨论】:

      猜你喜欢
      • 2015-06-02
      • 2013-08-28
      • 2013-10-11
      • 2012-02-17
      • 1970-01-01
      • 2011-02-20
      • 2013-03-29
      相关资源
      最近更新 更多