Select simples hibernate

queria fazer um select simple que me retorne um objeto preenchido… tipo assim.

Pessoa p = new Pessoa();
p= pessoaFacade.getPessoaByCod(codPessoa);

classe facade…

public Pessoa getPessoaByCod(int cod){
    	
    	Session sessao = HibernateUtility.getSession();
		Transaction tx = sessao.beginTransaction();
		Pessoa pe = new Pessoa();
		//AQUI FICARIA A QUERY QUE BUSCA PESSOA....
		
		sessao.close();
		tx.commit();
		sessao.close();
		
    	
    	return pe;
    }

é assim que faz?

pe = (Pessoa) sessao.load(Pessoa.class, cod);

ou

pe = (Pessoa) sessao.get(Pessoa.class, cod);

Bom jairEltom, primeiro muito obrigado pq vc sempre tem ajudado a todos aqui…
deu o seguinte erro:

java.lang.Error: Unresolved compilation problem: 
	The method get(Class, Serializable) in the type Session is not applicable for the arguments (Class, int)

	at hibernate.TbEventosFacade.getEventoByCod(TbEventosFacade.java:105)
	at org.apache.jsp.detalharEvento_jsp._jspService(detalharEvento_jsp.java:66)

no meu jsp fiz isso:
TbEventos tb = new TbEventos();
TbEventosFacade tbs = new TbEventosFacade();
tb= tbs.getEventoByCod(codigo);

e esse é o meu metodo que busca…

 public TbEventos getEventoByCod(int cod){
    	
    	Session sessao = HibernateUtility.getSession();
		Transaction tx = sessao.beginTransaction();
		TbEventos tb = new TbEventos();
		tb = (TbEventos) sessao.get(TbEventos.class, cod);
		//fecha a sessão
		sessao.close();
		tx.commit();
		sessao.close();
		
    	
    	return tb;
    }

fui fazer um projetinho aqui usando hibernate sem estudar a fundo e ta me dando uma dor de cabeça danada… obrigado

Na verdade o que eu quero fazer é muito simples, eu tenho o codigo e quero fazer um select pra pegar todos os campos da tabela que tem aquele codigo.

O que acontece que é você não está usando Java 1.5 (ou seu IDE não está configurado adequadamente), o segundo parametro esperado é um Serializable, e int sequer é objeto, então faça:

tb = (TbEventos) sessao.get(TbEventos.class, Integer.valueOf(cod));

Jair Eltom, desculpa a insistencia ai mas deve ser uma coisinha basica…
da uma olhada no erro ai.

COD EVENTO4 = 27
Hibernate: /* load hibernate.TbEventos */ select tbeventos0_.EVE_ID as EVE1_0_, tbeventos0_.EVE_NOME as EVE2_0_0_, tbeventos0_.EVE_SIGLA as EVE3_0_0_, tbeventos0_.EVE_DT_INSC_INICIO as EVE4_0_0_, tbeventos0_.EVE_DT_INSC_FIM as EVE5_0_0_, tbeventos0_.EVE_URL as EVE6_0_0_, tbeventos0_.EVE_LOCAL as EVE7_0_0_, tbeventos0_.EVE_TEMA as EVE8_0_0_, tbeventos0_.EVT_ID as EVT9_0_0_, tbeventos0_.ARC_CODIGO as ARC10_0_0_, tbeventos0_.PAIS_SIGLA as PAIS11_0_0_, tbeventos0_.UF_REGIAO as UF12_0_0_, tbeventos0_.UF_SIGLA as UF13_0_0_, tbeventos0_.EVE_SITUACAO as EVE14_0_0_, tbeventos0_.EVE_DT_INICIO as EVE15_0_0_, tbeventos0_.EVE_DT_FIM as EVE16_0_0_, tbeventos0_.EVE_AUTORIZA_WEB as EVE17_0_0_, tbeventos0_.EVE_CARGA_HORARIA as EVE18_0_0_, tbeventos0_.EVE_OBS as EVE19_0_0_, tbeventos0_.EVE_CIDADE as EVE20_0_0_, tbeventos0_.EVE_ABRANGENCIA as EVE21_0_0_, tbeventos0_.EVE_RESPONSAVEL as EVE22_0_0_, tbeventos0_.EVE_NR as EVE23_0_0_, tbeventos0_.EVE_DT_INCLUSAO as EVE24_0_0_ from IBICT_FS.TB_EVENTOS tbeventos0_ where tbeventos0_.EVE_ID=?
2006-07-26 09:59:38,078 ERROR [localhost].[/ibict].[jsp]  -> Servlet.service() for servlet jsp threw exception
org.hibernate.SessionException: Session is closed
	at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:131)
	at org.hibernate.transaction.JDBCTransaction.commitAndResetAutoCommit(JDBCTransaction.java:119)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:95)

esse COD EVENTO4 = 27 é um system.out que dei dentro do metodo. brigadao

Parece que a sessão está fechada, antes de chama qualquer coisa da sessão, dá uma conferida se ela está aberta, só pra ter certeza…

O cara, brigado… resovi aqui com sua ajuda…
no meu metodo eu cometi um vacilo de de digitar 2 vezes
sessao.close();
sessao.close();

sao os erros comum do bom e velho copiar colar… mas muito obrigado mesmo

So a ultima perguntinha …
pq qualquer campo quando dou por exemplo no jsp <%=tb.getEveId() %>
ele da null pointer…
esta certo a impressao desse select estar com o interrogaçao em vez do codigo?

COD EVENTO4 = 22
Hibernate&#58; /* load hibernate.TbEventos */ select tbeventos0_.EVE_ID as EVE1_0_, tbeventos0_.EVE_NOME as EVE2_0_0_, tbeventos0_.EVE_SIGLA as EVE3_0_0_, tbeventos0_.EVE_DT_INSC_INICIO as EVE4_0_0_, tbeventos0_.EVE_DT_INSC_FIM as EVE5_0_0_, tbeventos0_.EVE_URL as EVE6_0_0_, tbeventos0_.EVE_LOCAL as EVE7_0_0_, tbeventos0_.EVE_TEMA as EVE8_0_0_, tbeventos0_.EVT_ID as EVT9_0_0_, tbeventos0_.ARC_CODIGO as ARC10_0_0_, tbeventos0_.PAIS_SIGLA as PAIS11_0_0_, tbeventos0_.UF_REGIAO as UF12_0_0_, tbeventos0_.UF_SIGLA as UF13_0_0_, tbeventos0_.EVE_SITUACAO as EVE14_0_0_, tbeventos0_.EVE_DT_INICIO as EVE15_0_0_, tbeventos0_.EVE_DT_FIM as EVE16_0_0_, tbeventos0_.EVE_AUTORIZA_WEB as EVE17_0_0_, tbeventos0_.EVE_CARGA_HORARIA as EVE18_0_0_, tbeventos0_.EVE_OBS as EVE19_0_0_, tbeventos0_.EVE_CIDADE as EVE20_0_0_, tbeventos0_.EVE_ABRANGENCIA as EVE21_0_0_, tbeventos0_.EVE_RESPONSAVEL as EVE22_0_0_, tbeventos0_.EVE_NR as EVE23_0_0_, tbeventos0_.EVE_DT_INCLUSAO as EVE24_0_0_ from IBICT_FS.TB_EVENTOS tbeventos0_ where tbeventos0_.EVE_ID=?
COD EVENTO3 = 22
2006-07-26 10&#58;26&#58;11,046 ERROR &#91;localhost&#93;.&#91;/ibict&#93;.&#91;jsp&#93;  -&gt; Servlet.service&#40;&#41; for servlet jsp threw exception
java.lang.NullPointerException
	at org.apache.jsp.detalharEvento_jsp._jspService&#40;detalharEvento_jsp.java&#58;77&#41;
	at org.apache.jasper.runtime.HttpJspBase.service&#40;HttpJspBase.java&#58;97&#41;
	at javax.servlet.http.HttpServlet.service&#40;HttpServlet.java&#58;802&#41;

Logo apos chamar o metodo que busca o registro ele está nulo?

sim… por exemplo no jsp fiz isso.
tb= tbs.getEventoByCod(tb);
System.out.println("COD EVENTO3 = " + tb);
a saida esta COD EVENTO3 = null

estranho né … mas to lutando aqui ja ate mudei o metodo…

tb = &#40;TbEventos&#41; sessao.get&#40;TbEventos.class, Integer.valueOf&#40;tb.getEveId&#40;&#41;&#41;&#41;;

o engraçado é que se troco o get por load como vc comentou acima da outro erro…

Hibernate&#58; /* load hibernate.TbEventos */ select tbeventos0_.EVE_ID as EVE1_0_, tbeventos0_.EVE_NOME as EVE2_0_0_, tbeventos0_.EVE_SIGLA as EVE3_0_0_, tbeventos0_.EVE_DT_INSC_INICIO as EVE4_0_0_, tbeventos0_.EVE_DT_INSC_FIM as EVE5_0_0_, tbeventos0_.EVE_URL as EVE6_0_0_, tbeventos0_.EVE_LOCAL as EVE7_0_0_, tbeventos0_.EVE_TEMA as EVE8_0_0_, tbeventos0_.EVT_ID as EVT9_0_0_, tbeventos0_.ARC_CODIGO as ARC10_0_0_, tbeventos0_.PAIS_SIGLA as PAIS11_0_0_, tbeventos0_.UF_REGIAO as UF12_0_0_, tbeventos0_.UF_SIGLA as UF13_0_0_, tbeventos0_.EVE_SITUACAO as EVE14_0_0_, tbeventos0_.EVE_DT_INICIO as EVE15_0_0_, tbeventos0_.EVE_DT_FIM as EVE16_0_0_, tbeventos0_.EVE_AUTORIZA_WEB as EVE17_0_0_, tbeventos0_.EVE_CARGA_HORARIA as EVE18_0_0_, tbeventos0_.EVE_OBS as EVE19_0_0_, tbeventos0_.EVE_CIDADE as EVE20_0_0_, tbeventos0_.EVE_ABRANGENCIA as EVE21_0_0_, tbeventos0_.EVE_RESPONSAVEL as EVE22_0_0_, tbeventos0_.EVE_NR as EVE23_0_0_, tbeventos0_.EVE_DT_INCLUSAO as EVE24_0_0_ from IBICT_FS.TB_EVENTOS tbeventos0_ where tbeventos0_.EVE_ID=?
2006-07-26 10&#58;42&#58;17,671 INFO  event.def.DefaultLoadEventListener  -&gt; Error performing load command
org.hibernate.ObjectNotFoundException&#58; No row with the given identifier exists&#58; &#91;hibernate.TbEventos#3&#93;
	at org.hibernate.ObjectNotFoundException.throwIfNull&#40;ObjectNotFoundException.java&#58;27&#41;
	at org.hibernate.event.def.DefaultLoadEventListener.load&#40;DefaultLoadEventListener.java&#58;118&#41;
	at org.hibernate.event.def.DefaultLoadEventListener.onLoad&#40;DefaultLoadEventListener.java&#58;75&#41;
	at org.hibernate.impl.SessionImpl.immediateLoad&#40;SessionImpl.java&#58;643&#41;

Cara, vou aproveitar e te perguntar um coisa of topic. vi que vc é de bh tb. vc esta trabalhando aqui na cidade. a empresa aqui paga uma pancada de treinamento aqui, mas cada professor que entra é pior que o outro. as vezes vc anima de dar um treinamento a noite…

Eis o problema então:

A diferença entre o metodo get() e load() é que quando get não encontra o registro ele retorna null e load lança uma exceção, que foi o que aconteceu:

Não existe um registro com esse identificador no banco.

E quanto ao treinamento, me manda email aí, a gente pode dar uma olhada:

java@jairelton.com

tb = (TbEventos) sessao.load(TbEventos.class, Integer.valueOf(tb.getEveId()));

FUNCIONOU ASSIM… Valeu. depois vc me responde do treinamento.
santiago@orbsat.com.br

Jairelton,

mudando um pouco de assunto, mas sem mudar muito… :slight_smile:

vc usa qual versão de Hibernate? Já deu uma olhada no Jboss 4 (EJB 3)? Ele tb tá usando Hibernate por debaixo dos panos!

Tava dando uma estudada e parece q o load() não existe mais. Parece que agora é refresh () para sincronizar memória/banco e merge() para sincronizar POJO/memória.

Será que são versões diferentes?

Valeu.

No Hibernate 3 que tem esse metodos, o refresh() atualiza a copia do objeto com os dados que estão no banco e o merge() faz o contrario…

to usando o 3… ta funcionado mais ou menos… hahaha
tem hora que pega e tem hora que nao. vou apanhar aqui um pouco e qualquer coisa posto. muito obrigado