我正在尝试将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)?
由于
答案 0 :(得分:1)
当然不是那样的。我甚至不确定如何在不必写一堆样板来加入交易等等的情况下去做。我的建议是使用EntityManager.getDelegate()
并将其转换为Hibernate Session。