加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – JPA的EntityManager应该是RequestScoped吗?

发布时间:2020-12-15 02:34:32 所属栏目:Java 来源:网络整理
导读:我正在使用JBoss7开发基于 JavaEE6的Web应用程序. 在我的应用程序中,我将EJB中的EntityManager注入: class ForumServiceEJB{ @PersistenceContext(type=EXTENDED) private EntityManager em;}class TopicServiceEJB{ @PersistenceContext(type=EXTENDED) pr
我正在使用JBoss7开发基于 JavaEE6的Web应用程序.
在我的应用程序中,我将EJB中的EntityManager注入:

class ForumServiceEJB
{
    @PersistenceContext(type=EXTENDED)
    private EntityManager em;

}

class TopicServiceEJB
{
    @PersistenceContext(type=EXTENDED)
    private EntityManager em;

}

当我使用ForumServiceEJB的EntityManager更新一些数据然后更改进入DB但TopicServiceEJB的EntityManager无法看到这些更改并且始终从Cache获取结果时的问题.

我正在使用ExtendedPerssisteenceContext,因为我的实体包含延迟加载类型的子实体集合.

如何使用ExtendedPersistenceContext类型的/ Inject EntityManager并在一个EJB中创建不同的EntityManager仍然可以看到其他不同的EJB EntityManagers所做的更改?

在某处我读到的EntityManagers应该是RequestScoped对象.

public class MyEntityManagerProducers {
 @Produces @RequestScoped 
 public EntityManager createDbEm() {
   return Persistence.createEntityManagerFactory("forumDb").
          createEntityManager();
 }

 public void disposeUdEm(@Disposes EntityManager em) {
   em.close();
 }

这是要走的路吗?

解决方法

I am using ExtendedPerssisteenceContext as My Entities contain child
Entity Collections of Lazy Loading type.

这不是使用EXTENDED的好理由.我建议你把它设为默认值,即TRANSACTION.最好在非企业环境中或使用应用程序管理的持久性时使您的EntityManager请求范围或方法范围,因为这不是一个非常重要的创建对象.而且,既不使用应用程序范围的EntityManager也不是一个好主意,因为它不是线程安全的.

话虽如此,当您使用JBoss时,您应该让容器处理EntityManager的生命周期,以防您使用JTA.因此,只需注入一切默认值即可

注意:

只有有状态会话bean才能拥有容器管理的扩展实体管理器.

链接:

> http://javanotepad.blogspot.com/2007/08/managing-jpa-entitymanager-lifecycle.html
> https://blogs.oracle.com/enterprisetechtips/entry/extended_persistence_context_in_stateful

建议:

您的业??务方法应该知道是否加载孩子.但那是理想的情况.很多时候我们不能说并且完全取决于用户输入 – 我们无法预测这一点.因此,有两种解决方案,

>进行单独的AJAX调用以加载子项
>使用名为open-session-in-view的过滤器.我更喜欢前者.

链接:

> https://community.jboss.org/wiki/OpenSessionInView
> http://static.springsource.org/spring/docs/1.2.9/api/org/springframework/orm/hibernate3/support/OpenSessionInViewFilter.html
> Why is Hibernate Open Session in View considered a bad practice?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读