Como utilizar o FindById() do Hibernate no GenericHibernateDAO

6 respostas
J

Olá!

Estou com dúvidas de como utilizar a session FindById() para testar se uma classe está recebendo a chave estrangeira de outra. Como exemplo, vou mostrar a classe ItemBiblioteca que recebe FK de Editora. Como faço isso no Hibernate? Nos códigos gerados vi o seguinte:
@JoinColumn(name = "CodEditora", referencedColumnName = "CodEditora")
    @ManyToOne(optional = false)
    private Editora codEditora;

Só isso basta?

Como faço para testar se a classe ItemBiblioteca pega mesmo a Chave de Editora? Eu tava fazendo assim:
EditoraDAO editoraDAO = new EditoraDAO();
       Editora editora = new Editora();
       editora.getCodEditora();
       editora.getNomeEditora();
       editora.getLogradouro();
       editora.getBairro();
       editora.getCidade();
       editora.getCep();
       editora.getUf();
       editora.getTelefone();
       editora.getEmail();
       editora.getFax();
       editora.getLinkSite();
       editora.getDataCadastro();
       
      editoraDAO.findById(1);

mas isso não me retorna nada. :(

PS.: Lembrando que ItemBiblioteca herda atributos para Livro e outros tipos.

Ajudem -me! :shock:

6 Respostas

D

Cara, eu costumo fazer assim:

@JoinColumn(name = "CodEditora")  
   @ManyToOne 
   private Editora codEditora;

E para procurar o id, eu costumo fazer desse jeito:

public String getId(Integer idEditora) {

		Session se = HibernateUtil.getSession();
		try {
			EditoraDAO editoraDAO = DaoFactory.getInstance().getEditoraDao(se);
			Editora editora = editoraDAO .findById(idEditora, false)                

			return id;
		} catch (Exception e) {
			System.out.println("Erro ao procurar id : "+e);
		} finally {
			HibernateUtil.closeSession(se);
		}
	}

Claro que se eu estiver errado, que me corrijam, fiz agora de cabeça!!!
Espero que te ajude!!!
Att;
Daniel

J

Olá Daniel!!

Não deu certo o código de teste. :frowning:

Como eu faço para saber se a classe ItemBiblioteca recebe a chave primaria da classe Editora?

Alguém pode me ajudar?
:wink:

D

Olá Jackye tudo bem?
Desculpe pela demora, é que aqui está osso…
Eu tinha escrito o código de cabeça e acabei escrevendo errado…
Vê se agora vai!!!

public CoEditora getId(int idCoEditora) {
		CoEditora coEditora = null;
		Session se = HibernateUtil.getSession();
		EditoraDao dao = DaoFactory.getInstance().getEditoraDao(se);

		try {
			coeditora = dao.findById(idCoEditora, false);
		} finally {
			HibernateUtil.closeSession(se);
		}
		return coEditora;
	}

Em que parte que não deu certo?
As vezes é melhor postar o erro tbm pra poder analisar melhor sabe?
Espero ter ajudado!
Att;
Daniel

J

Olá Daniel!

Eu tenho uma classe chamada GenericHibernateDAO onde tem o seguinte código referente ao FindById():
@Override
    public T findById(ID id) {
        T entidade = (T) getSession().load(getEntidadePersistente(), id);
        return entidade;
    }
Como eu tô utilizando o modelo MVC para criar a aplicação, tenho um pacote para testes, será que poderia me indicar um código. Por isso tava tentando utilizar o seguinte código:
EditoraDAO editoraDAO = new EditoraDAO();  
       Editora editora = new Editora();  
       editora.getCodEditora();  
       editora.getNomeEditora();  
       editora.getLogradouro();  
       editora.getBairro();  
       editora.getCidade();  
       editora.getCep();  
       editora.getUf();  
       editora.getTelefone();  
       editora.getEmail();  
       editora.getFax();  
       editora.getLinkSite();  
       editora.getDataCadastro();  
         
      editoraDAO.findById(1);
D

Olá Jackye!!!
Na parte do teu código, vc já experimentou colocar assim pra ver se pega o id?

Att;
Daniel

J

Olá Daniel!

Quando inseri aquela parte no código deu erro que dizia que necessitava criar método na classe Editora.
Eu quero usar o FindById() pra buscar dados no BD, mas não consegui entender a lógica, então tentei usar o código a seguir:

Session secao = HibernateUtil.getSessionFactory().openSession();
        
        Editora editora = (Editora) secao.load(Editora.class, 1);
                   
        System.out.println(editora.getNomeAutor());

Escolhi que ele me retornasse o nome da editora.

Mas fica a dúvida de como usar o FincById()!! :cry:

Olha o código da Classe DAO de Editora:
public class EditoraDAO extends GenericHibernateDAO<Editora, Integer> {
    public static EditoraDAO fabricaEditoraDAO(){
        return new EditoraDAO();
    }    
}

A classe EditoraDAO tem Extends em GenericHibernateDAO que é onde está o código da Session FindById().
E aí como fica? Como posso adaptar o seu código para usar no meu? Alguns campos mudam.

Abraços.

Criado 7 de dezembro de 2011
Ultima resposta 12 de dez. de 2011
Respostas 6
Participantes 2