Busca por ID JPA/Hibernate (RESOLVIDO)

8 respostas Resolvido
eclipsejavahibernate
A

estou tentando buscar apenas um item na tabela pelo código, mas o compilador apresenta um erro, alguém pode me ajudar?

import java.lang.reflect.ParameterizedType;

import java.util.List;

import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.Persistence;

import javax.persistence.Query;

public class GenericDAO {

private Class classe;
@SuppressWarnings(unchecked)

public GenericDAO() {

this.classe = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];

}
@SuppressWarnings(unchecked)

public Class buscarPorID(int id) {

EntityManagerFactory emf = Persistence.createEntityManagerFactory(intranethope);

EntityManager em = emf.createEntityManager();
return (Class<T>) em.find(classe.getClass(), 1);

}

}

package intranethope;

import java.util.List;

import javax.persistence.Temporal;

import org.junit.Ignore;

import org.junit.Test;

import br.com.intranethope.dao.EstadoDAO;

import br.com.intranethope.entidades.Estado;

public class TesteHibernate {

<a class="mention" href="/u/test">@Test</a>

@Ignore

<a class="mention" href="/u/test">@Test</a>

public void testeBuscaporID() {

EstadoDAO dao = new EstadoDAO();

Class est = dao.buscarPorID(1);

System.out.println(est);

}
}

8 Respostas

R

no método buscarPorID, você não iniciou uma trasanção com entityManager, por exemplo:

em.getTransaction().begin();
return (Class) em.find(classe.getClass(), 1);

em.getTransaction.close();

como é só uma busca não precisa usar o commit

A

cara, no caso de uma busca nao é necessário fazer o begin

M

Troca o seu método buscarPorId, por esse abaixo:

public <T> T buscarPorId(int id) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory(intranethope);
EntityManager em = emf.createEntityManager();

return  em.find(classe.getClass(), 1);
}
A

boa tarde mike, acho que foi quase, agora ele apresenta esse erro.

A

acho que o problema é nessa linha

return (T) em.find(classe.getClass(), 1);

M

pra que isso?
O problema esta ai

A

tem razão!!
Estado est = dao.buscarPorID(1);

essa é a forma correta! valeu cara! obrigado pelo tempo :slight_smile:

M
Solucao aceita

Que bom que certo :slight_smile:
Se a minha resposta lhe ajudou, considere marcar como Solução :slight_smile:

Criado 28 de março de 2018
Ultima resposta 28 de mar. de 2018
Respostas 8
Participantes 3