我有一个方法(比如方法A),我将实体保存到db;这个方法在EJB One中。在方法A中,在合并实体之后,我调用另一个方法(比如方法B),它需要处理方法A中保存的数据。方法B在EJB Two中。 这两个EJB都是无状态的,但在EJB One中我使用EJB Two的本地接口。 两者都有:
@PersistenceContext(unitName = "emDevices")
private EntityManager em;
当方法B从DB读取数据时,无法找到先前在方法A中保存的新数据。 我试图使用@TransactionAttribute(TransactionAttributeType.SUPPORTS)而没有任何成功。 有谁知道为什么方法B看不到方法A保存的数据,即使它们使用相同的持久化上下文?
我使用hibernate 4.0.0和weblogic 12.1.3(J2EE6)
答案 0 :(得分:2)
如果我理解正确,那么在EJB One中注入EJB 2。如果在EJB One上没有设置TransactionAttribute,则默认为REQUIRED,如果尚未启动事务,则将启动事务。需要事务才能保留数据。然后,如果在EJB One中注入EJB Two并调用EJB Two的方法,则会传播事务。一切都应该没问题。你是对的,共享持久化上下文。因此,应该能够阅读,以前写过的内容,如果真的是同一个交易。
A)你对看数据的意思是什么?我想你用em.find
?然后,没关系;如果你的意思是一个查询,很明显查询不会返回数据,因为它仍然在持久化上下文中;数据将在交易结束时提交。
那么,如果不是A)中提到的那一点,那可能是错的?
如果我的回答不够,请发一点代码;那么我们可能会帮助他们。