2

我的“HelloJPA”代码(如下)试图将员工存储在数据存储中。但是,在提交(本地资源)事务后,任何读取持久对象的尝试都会得到“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 参考)没有专门解决这个问题,我发现使用资源本地事务的代码示例似乎在提交后从未尝试读取对象......但肯定有一个非常简单的方法去做吧??

在此先感谢您提供任何帮助/指示!

4

1 回答 1

0

employee在关闭实体管理器后变得分离,但没有任何东西禁止访问Id分离实体的注释属性。IOW,您的代码是正确的,并且适用于 Hibernate 和 EclipseLink。也许在 OpenJPA 的 Jira 中搜索现有问题或打开一个新问题。

于 2010-08-10T13:13:44.313 回答