Pessoal, estou precisando de ajuda em questão de se utilizar o criteria com entityManager com trasações controladas pelo container,
vi alguns posts aqui no forum, porém as soluções propostas não funcionaram,
segue a situação,
preciso que as transacões sejam controladas pelo container, porém, gostaria de saber se é possível usar o criteria pegando a session, desta maneira:
session = (Session) entityManager.getDelegate();
pois recebo uma exception de nullpointer ao executar meu método getUniqueResult, creio que pode algum problema na injeção
@Stateful
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class PersistenceInterface implements PersistenceInterfaceLocal, Serializable {
public static final Logger log = Logger.getLogger(PersistenceInterface.class);
@PersistenceContext(unitName = "persistenceUnit")
private EntityManager entityManager;
Session session;
public PersistenceInterface() {
super();
try {
session = (Session) entityManager.getDelegate();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void merge(AbstractEntity entity) {
try {
entityManager.merge(entity);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void persist(AbstractEntity entity) {
try {
entityManager.persist(entity);
} catch (HibernateException e) {
e.printStackTrace();
}
@Override
public Object getUniqueResult(Class classe, Long id) {
try {
Criteria criteria = session.createCriteria(classe);
criteria.add(Restrictions.eq("ativo", true));
criteria.add(Restrictions.eq("id", id));
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
return criteria.uniqueResult();
} catch (NonUniqueResultException e) {
e.printStackTrace();
} catch (HibernateException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public Criteria getCriteria(Class classe) {
return session.createCriteria(classe);
}
@Override
public Criteria createCriteria(Class classe) {
return getCriteria(classe);
}
}