【问题标题】:EcipseLink JPA 2.0 is refresh()/flush() needed?EcipseLink JPA 2.0 是否需要 refresh()/flush()?
【发布时间】:2012-01-19 22:20:23
【问题描述】:

当有 150 多个用户连接到我们的 Web 应用时,我的数据库返回的数据不一致的奇怪行为。

我的 EJB 主要通过 Netbeans 7.0 生成的代码连接到 MySQL,并针对可重用性进行了一些定制。发生的情况是,用户经常(在浏览器中)收到不应该是的数据。 IE。用户正在查看产品A的详细信息,但部分数据(一些一对多的关系数据)属于不同的产品。当较少的用户登录时,我们没有这个问题。大约 150 个用户似乎开始出现问题。

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

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

【问题讨论】:

    标签: glassfish ejb jpa-2.0 eclipselink


    【解决方案1】:

    这取决于你的情况。

    但如果您想使用这些方法,请参考:

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

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

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

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

    【讨论】:

    • 感谢您提供更多信息。这证实了我从大多数论坛中获取的内容
    猜你喜欢
    • 2022-01-08
    • 2015-04-19
    • 2015-11-26
    • 2015-02-15
    • 2010-10-31
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多