2
我的“HelloJPA”代码(下面)尝试将Employee存储在数据存储中。然而,任何企图犯下(本地资源)的交易后读取持久化对象被奖励一个“IllegalStateException异常”:初学者问题:JPA的基本插入习惯用法?
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
OK,我想,管理者占有了我的新分配的员工对象,它的一旦我进行交易就变得不可用。但是,那么实现这个简单操作的常见习惯用法是什么?即将对象一直写入数据存储区,同时仍保持只读访问权限?文档(教程或API参考)没有具体解决这个问题,并且我发现使用资源本地事务的代码示例在提交后似乎没有尝试读取对象...但肯定必须有一个简单的方法去做吧??
在此先感谢您的任何帮助/指针!
首先,创建的员工是否确实坚持了DB?其次,你的员工实体是什么样的?在资源本地传输提交之后使用实体是一件有效的事情。 – Rick 2010-03-23 14:59:48
嘿,里克,thx您的评论。 是的,员工被添加到数据存储。当然,这是一个玩具例子,让“员工”看起来简单的末端: @Entity 公共类员工实现Serializable { 私有静态最后的serialVersionUID长= ...; @Id private String id; @基本 私人字符串名称; @基本 私人字符串的位置; //吸尘器和吸尘器省略 } 这有帮助吗?提前致谢! – jucar 2010-03-25 18:03:05
你能发布IllegalStateException吗?里克的权利,这应该工作。 – Mike 2010-04-02 01:46:10