2013-04-03 32 views
0

我想注入休眠会话到DAO。 DAO被注入到CDI的EJB 3.1无状态Bean中。注入休眠会话(非EntityManager)到DAO(与JEE6)

我不想使用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

是否有可能注入休眠会议(不完整tyManager)在EJB环境中?

谢谢

回答

1

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