EcipseLink JPA 2.0需要refresh()/ flush()吗?

时间:2011-12-14 04:21:10

标签: glassfish ejb jpa-2.0 eclipselink

当有超过150个用户连接到我们的网络应用程序时,我的数据库返回的不一致数据有奇怪的行为。

我的EJB通过大多数Netbeans 7.0生成的代码连接到MySQL,为可重用性定制了一点。发生的事情是,每隔一段时间,用户就会收到(在浏览器中)不应该是的数据。即用户正在查看产品A的详细信息,但部分数据(某些一对多关系数据)属于不同的产品。当较少用户登录时,我们没有此问题。似乎问题开始引起大约150名用户的兴趣。

代码的EntityManager部分仅em.create(...)em.persist(...)em.merge(...)。没有refresh()flush()。我禁用了共享缓存。我没有负载平衡。

什么/我在哪里可以看到更多?

1 个答案:

答案 0 :(得分:4)

这取决于你的情况。

但是如果您想使用这些方法,请提供您的信息:

refresh()使用数据库表中的数据更新实体。

flush()完全相反,将实体中的值保存到数据库表中。

但是由于您正在使用EJB,如果您正在使用CMP,那么默认情况下,EJB中的所有方法都在事务中运行(除非提供事务属性以不使用它们)。事务以方法调用开始,并在方法完成时结束。最后它被提交,这意味着您不需要调用flush()。但是如果您需要在提交之前将数据库与实体同步,那么您需要调用flush()

除此之外,它实际上取决于您的要求。