[resol] Spring, JPA, Hibernate Criteria = Exception -> No transactional EntityManager available

Bom dia galera :slight_smile:

então… Uso Spring Data JPA.
Mas ele não me dá flexibilidade para queries dinamicas…
Então a parte dele resolvi fazer o seguinte:

Service, que tem o DAO INJETADO

@Service
@Transactional
public class GenericFilterService {
	
	@Autowired
	private GenericFilterDao genericFilterDao;

DAO que tem o EntityManager INJETADO

@Component
public class GenericFilterDao {

	@PersistenceContext 
	private EntityManager entityManager;
	
	
	public List<?> executeQuery(...){
		Session hibernateSession = entityManager.unwrap(Session.class); //exception aqui
		Criteria criteria = hibernateSession.createCriteria(entityClass);
        }

Só para deixar claro, eis a exception:

java.lang.IllegalStateException: No transactional EntityManager available
	at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:223)
	at $Proxy49.unwrap(Unknown Source)

Então galera…
Fiz algo de errado?

Tente fazer assim:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<T> criteria = cb.createQuery(entityClass);

Não cara, tem que ser a session do hibernate.

SE ALGUEM tiver o mesmo problema:

injetei com o @Autowired o EntityManagerFactory e criiei o EntityManager na mão!
depois só da o getTransaction e o begin :slight_smile:
abraços