glassfish - EcipseLink JPA 2.0 是否需要refresh()/flush()?

标签 glassfish ejb jpa-2.0 eclipselink

当有 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/

相关文章:

jpa - 使用 Glassfish 3.1.1 的persistence.xml

java - 覆盖叶类中的 JPA 映射

java - 用于创建和更新时间戳的触发器与 JPA @PrePersist 的优缺点

java - PermGen 会泄漏到 native 堆中吗?

java - 不满意的依赖异常 : There was no object available for injection at SystemInjecteeImpl

mysql - 什么可能导致此 Glassfish/JDBC 错误 "No database selected"

web-applications - 通过 JPA Vs 访问数据库表。 Web 应用程序中的 EJB

java.lang.ClassFormatError : Duplicate method name&signature in class file 错误

java - IncationContext 是否传播到嵌套方法

JPA查询忽略时间的日期