【问题标题】:Injecting hibernate Session (not EntityManager) into DAO (with JEE6)将休眠会话(不是 EntityManager)注入 DAO(使用 JEE6)
【发布时间】:2013-04-03 14:25:40
【问题描述】:

我正在尝试将休眠会话注入 DAO。 DAO 被注入到带有 CDI 的 EJB 3.1 无状态 Bean 中。

我不想使用 EntityManager。我更喜欢直接使用 Hibernate Session。 但是与 EJB 一起使用时,应用程序服务器(JBoss 7)会尝试注入 EntityManager,而不是休眠会话。


在创建 DAO 时出现以下错误:

Caused by: java.lang.IllegalArgumentException: Can not set org.hibernate.Session field com.mycompany.persistence.dao.RoleDAO.session to org.jboss.as.jpa.container.TransactionScopedEntityManager


我的代码:

persistence.xml

<persistence>
    <persistence-unit name="MyPU">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:jboss/datasources/MyDS</jta-data-source>

        <class>com.mycompany.entity.MyEntity</class>
        <class>com.mycompany.entity.OtherEntity</class>

        <properties>
            <property name="hibernate.show_sql" value="false" />
        </properties>

    </persistence-unit>
</persistence>


RoleBean.java(EJB)

@Stateless
@Remote(RoleRemote.class)
public class RoleBean implements RoleRemote {
    @Inject
    private RoleDAO roleDAO;

}


RoleDAO.java

@Named
public class RoleDAO {

    @PersistenceUnit(unitName = "MyPU")
    private Session session;
}


和错误: Caused by: java.lang.IllegalArgumentException: Can not set org.hibernate.Session field com.mycompany.persistence.dao.RoleDAO.session to org.jboss.as.jpa.container.TransactionScopedEntityManager

是否可以在 EJB 环境中注入 hibernate Session(不是 EntityManager)?

谢谢

【问题讨论】:

    标签: hibernate jboss7.x java-ee-6 cdi ejb-3.1


    【解决方案1】:

    当然不是这样。我什至不确定您将如何去做,而不必编写一堆样板来加入交易等等。我的建议是使用EntityManager.getDelegate() 并将其转换为休眠会话。

    【讨论】:

      猜你喜欢
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2013-09-16
      • 1970-01-01
      • 2012-06-02
      相关资源
      最近更新 更多