Injetar a Session do hibernate ao invés da EntityManager

Olá

To tentando injetar uma instância gerenciada da Session do hibernate no meu DAO. E meu DAO é injetado no EJB via @Inject

Não quero usar o EntityManger. Prefiro trabalhar com a Session direto. Mas usando com EJB, o servidor de aplicação (JBoss 7) tenta injetar uma instância do EntityManager, não da Session.

Acontece o seguinte erro quando o DAO está sendo criado:

Segue os códigos

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 (meu 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;
}

É possível injetar uma Session (não EntityManager) num ambiente EJB 3.1?

Obrigado

isso aqui

@PersistenceUnit(unitName = "MyPU")  
    private Session session;  

não vai rolar não

se vc quer usar a session do hibernate, porque vc não configura o xml do hibernate em vez do jpa e usa o hibernate puro

é possivel recuperar uma session do hibernate apartir de um entitymanager, mas da forma que vc fez ai não vai rolar

da uma olhada nesse topico

http://www.guj.com.br/java/261747-hibernate-session-a-partir-do-entity-manager

mas se eu configurar via xml do hibernate, ele vai deixar de ser gerenciado? abrir transação, commitar, e depois fechar a conexão normalmente?

so uma pergunta porque vc quer uma session e não o entitymanager?

em tese usando com a API do hibernate eu nao tenho um controle melhor? além de economizar uma camada já que que o entitymanager vai repassar as chamadas pro hibernate?

Eu sempre trabalhei com Spring + Hibernate… mas dessa vez o ambiente é EJB 3.1 + JPA. A impressão que tenho é que nao tenho controle das coisas

Olá amigo é bem simples o que você deve fazer é delegar uma Session pelo EntityManager.

	protected Session getSession() {
		return (Session) entityManager.getDelegate();
	}

Session session = em.unwrap(session.class);

[quote=dbdbdb]em tese usando com a API do hibernate eu nao tenho um controle melhor? além de economizar uma camada já que que o entitymanager vai repassar as chamadas pro hibernate?

Eu sempre trabalhei com Spring + Hibernate… mas dessa vez o ambiente é EJB 3.1 + JPA. A impressão que tenho é que nao tenho controle das coisas[/quote]
Mas de onde você tirou isso?
Esquece essa teoria, esquece essa idéia.
JPA é um padrão e o hibernate o implementa.
Se você me dissesse que tem mais familiaridade com a API do hibernate e que não manja muito de JPA eu até aceitaria, agora, falar isso…