当有 150 多个用户连接到我们的 Web 应用程序时,我的数据库返回的数据不一致,这很奇怪。
我的 EJB 主要通过 Netbeans 7.0 生成的代码连接到 MySQL,并为可重用性进行了一些定制。发生的情况是,用户(在浏览器中)经常收到不正确的数据。 IE。用户正在查看产品A
的详细信息,但部分数据(一些一对多关系数据)属于不同的产品。当登录用户较少时,我们不会出现此问题。似乎在大约 150 个用户时问题就开始出现。
代码的 EntityManager
部分仅执行 em.create(...)
、em.persist(...)
或em.merge(...)
。没有 refresh()
或 flush()
。我禁用了共享缓存。我没有负载平衡。
我可以在哪里查看更多内容?
最佳答案
这取决于你的情况。
但如果您想使用这些方法,请引用:
refresh()
使用数据库表中的数据更新实体。
flush()
的作用恰恰相反,将实体中的值保存到数据库表中。
但是由于您使用的是 EJB,如果您使用 CMP,则默认情况下 EJB 中的所有方法都在事务中运行(除非提供了事务属性以不使用它们)。事务从方法调用开始,到方法完成时结束。最后它被提交,这意味着您不需要调用flush()
。但是如果您需要在提交之前将数据库与实体同步,那么您需要调用flush()
。
除此之外,这实际上取决于您的要求。
关于glassfish - EcipseLink JPA 2.0 是否需要refresh()/flush()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8499454/