我的“HelloJPA”代码(下面)尝试将Employee存储在数据存储区中。但是,在提交(资源本地)事务之后读取持久对象的任何尝试都会获得“IllegalStateException”:
Employee employee = ...
EntityManagerFactory factory =
Persistence.createEntityManagerFactory( "HelloJPA", System.getProperties() );
EntityManager manager = factory.createEntityManager();
EntityTransaction transaction = manager.getTransaction();
try {
transaction.begin();
manager.persist( employee );
transaction.commit();
} finally {
if (transaction.isActive()) {
transaction.rollback();
}
manager.close();
}
System.out.println("Employee id == " + employee.getId() ); //<< IllegalStateException
好吧,我猜,经理占用了我新分配的员工对象,一旦我提交了交易,它就变得不可用了。但是,实现这个简单操作的常用习惯是什么,即将对象一直写入数据存储区,同时仍保持对它的只读访问权限?文档(教程或API参考)没有具体解决这个问题,我发现使用资源本地事务的代码示例在提交后似乎永远不会尝试读取对象...但肯定必须有一个简单的方法做到了吗?
提前感谢您对此有任何帮助/指示!
答案 0 :(得分:0)
关闭实体管理器后,您的employee
会分离,但没有任何内容禁止访问分离实体的Id
注释属性。 IOW,您的代码是正确的,并与Hibernate和EclipseLink一起使用。也许在OpenJPA的Jira中搜索现有问题或者打开一个新问题。