1

我正在尝试将休眠会话注入 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


我的代码:

持久性.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;

}


角色DAO.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 环境中注入休眠会话(不是 EntityManager)?

谢谢

4

1 回答 1

1

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

于 2013-04-04T13:22:00.430 回答