EclipseLink无法检索手动插入的实体

时间:2011-06-29 08:47:00

标签: java jpa eclipselink

我在使用EclipseLink时遇到了一些麻烦。我的程序必须与数据库(代表建筑物)进行交互。我写了一个输入测试模式,我可以通过控制台手动插入内容。

我的问题:正常的getByID操作可以正常工作,如果我尝试检索我之前通过EclipseLink本身插入的实体(通过commit()),但在尝试选择通过SQL脚本手动插入的行时会抛出NoResultException (建筑 - >很多房间 - >脚本)。

这(oversemplified)工作正常:

main() {
  MyRoom r = new MyRoom();
  r.setID("floor1-roomnr4");
  em.commit(r); //entity manager
  DAO.getRoomByID("floor1-roomnr4"); // works
}

和generation-script +简单的getRoomByID()组合会引发异常。

如果我在SQL Developer中尝试它,我会得到我想要的完全 select语句的结果,它只是抛出一个NoResultException。我也只在输入模式下遇到这个问题,否则选择生成的行也可以。

EclipseLink是否有一些缓存机制我不知道哪个导致了一些问题?

2 个答案:

答案 0 :(得分:2)

您确定EclipseLink和SQL Developer是否连接到同一个数据库?请验证两者的连接信息。生成脚本是否使用“commit”命令提交更改?

答案 1 :(得分:0)

如果EclipseLink的工作方式与Hibernate相似,则可以使用缓存。 “第一级缓存”保证您在一个事务中获得完全相同的实例,这是有意义的。如果您知道EclipseLink / transactions,那么尝试逐出所有已加载的实例或提交事务,然后再次尝试DAO。这将迫使EclipseLink再次从数据库中获取数据

请参阅Answer to similar question