2013-04-03 68 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()並將其轉換爲休眠會話。