将hibernate会话(不是EntityManager)注入DAO(使用JEE6)

时间:2013-04-03 14:25:41

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

我正在尝试将hibernate Session注入DAO。 使用CDI将DAO注入到EJB 3.1无状态Bean中。

我不想使用EntityManager。我更喜欢直接使用Hibernate Session。 但是使用EJB,应用服务器(JBoss 7)尝试注入EntityManager,而不是hibernate Session。


当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)?

由于

1 个答案:

答案 0 :(得分:1)

当然不是那样的。我甚至不确定如何在不必写一堆样板来加入交易等等的情况下去做。我的建议是使用EntityManager.getDelegate()并将其转换为Hibernate Session。