Problema com o HIBERNATE!

12 respostas
S

[b]Boa noite !!!

Senhores estou com seguinte problema … em meu projeto estou usando o HIBERNATE e o STRUTS então criei uma classe DAO com os metodos para salvar, atualiza e outros mais quando eu chamo esses métodos dentro de um action os mesmos não funcionam, porem se eu utilizar os mesmo métodos em uma classe com um método main funciona perfeitamente, séra que eu estou esquecendo de algo.

Alguem poderia me ajudar !!!

Desde já agradeço…
[/b]

12 Respostas

rafaelglauber

gera algum erro?

S

Pior que não !!!

O mais engraçado é que eu tenho o mesmo projeto no meu computador de casa e no do trabalho, so no computador de casa é que dá esse problema já no trabalho se eu colocar o código dentro de um MAIN não funciona so funciona dentro de um ACTION…

rafaelglauber

coloca ai o fonte do DAO que fez para dar uma pista…

S

Essa é a minha classe DAO !!!

public class PingTesteDAO {
private Session session;

public PingTesteDAO(Session session){
	this.session = session;
}

public void salva(PingTeste p){
	this.session.beginTransaction();
	this.session.save(p);
	this.session.getTransaction().commit();
}

public void remove(PingTeste p){
	this.session.beginTransaction();
	this.session.delete(p);
	this.session.getTransaction().commit();
}

public PingTeste procura(String ip){
	return (PingTeste)this.session.load(PingTeste.class, ip);
}

public void atualiza(PingTeste p){
	this.session.beginTransaction();
	this.session.update(p);
	this.session.getTransaction().commit();
	
}

public List<PingTeste> listaTudo(){
	return this.session.createCriteria(PingTeste.class).list();
}

public List<PingTeste> pagina(int inicio, int quantia){
	return this.session.createCriteria(PingTeste.class).setMaxResults(quantia).setFirstResult(inicio).list();
	
}

public void fechaConcexao(){
	this.session.close();
}

}

Eu vou tentar gerar o problema aqui pra vê se consigo gerar alguma mensagem de erro !!!

S

Quando eu tento executar o seguinte código dentro de método MAIN aqui no computador do meu trabalho…

public class Teste {

public static void main(String[] args) {

PingTesteDAO dao = new PingTesteDAO(new HibenateFactory().getSession());
PingTeste pt = dao.procura("127.0.0.1");
	System.out.println(pt.getIp());
	
	pt.setIp("127.0.0.2");
	pt.setNomeHost("LOCAL HOST");
	pt.setEstado(false);
	pt.setResposta(null);
	dao.atualiza(pt);
	dao.fechaConcexao();

}

}

ele dá o seguinte erro …

Exception in thread main org.hibernate.HibernateException: identifier of an instance of br.com.ping.modelo.PingTeste was altered from 127.0.0.1 to 127.0.0.2

at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:58)

at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:164)

at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:120)

at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:196)

at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)

at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)

at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)

at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)

at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)

at br.com.ping.DAO.PingTesteDAO.atualiza(PingTesteDAO.java:35)

at Teste.main(Teste.java:17)

so que no meu computador de casa o problema acontece ao contrário os métodos não executa nas ACTION’S mais executa no método MAIN de uma classe…

rafaelglauber

você mapeou o objeto com a chave primária sendo um dos campos que está tentando atualizar???

root_

Use mais recursos do java…
Veja sobre criação de classes staticas e publicas…
fazendo referencias vc consegue!

Se vc n consegui sucesso com essa dica… eu elaboro um exemplo massinha pra ti e anexo aqui!
to meio sem tempo de participar do forum por esses tempos.
Abraços!

S

Tudo bem esse problema agora ficou claro obrigdo pela ajuda rafaelglauber, mais agora por que que eu não estou conseguindo executar os mesmo métodos na outra máquina dentro de uma ACTION, isso pode ser algum problema de configuração ???

S

root_ ???

Fera não entendi como eu posso ultilizar essa dica com o meu problema ???

rafaelglauber

já comparou os xmls das classes?

agora, a nível de dica, use um campo ID, tipo, “Long ping_id” para mapear como chave primária(AUTO_INCREMENTO), mesmo que você coloque um UNIQUE no campo do IP ou para outro que queira ser unico, pois terá uma persistencia de maneira mais adequada para quando quiser usar JPA (nao vai aproveitar muita coisa mas já vai se acostumando).

S

Senhores ontem falei sobre o meu problema com o HIBERNATE e ainda não consegui resolver, o problema é que não estou conseguindo executar os meus métodos da minha classe DAO usando HIBERNATE dentro da minhas ACTIONS do STRUTS e nem dentro de uma classe que estende de TIMERTASK, mais quando eu executo os mesmos métodos dentro de um método MAIN em uma classe separada funciona perfeitamente, abaixo mostro o código da minha classe DAO…

package br.com.ping.DAO;

import java.util.List;

import org.hibernate.Session;

import br.com.ping.modelo.PingTeste;

public class PingTesteDAO {
private Session session;

public PingTesteDAO(Session session){
	this.session = session;
}

public void salva(PingTeste p){
	this.session.beginTransaction();
	this.session.save(p);
	this.session.getTransaction().commit();
}

public void remove(PingTeste p){
	this.session.beginTransaction();
	this.session.delete(p);
	this.session.getTransaction().commit();
}

public PingTeste procura(String ip){
	return (PingTeste)this.session.load(PingTeste.class, ip);
}

public void atualiza(PingTeste p){
	this.session.beginTransaction();
	this.session.update(p);
	this.session.getTransaction().commit();
	
}

public List<PingTeste> listaTudo(){
	return this.session.createCriteria(PingTeste.class).list();
}

public List<PingTeste> pagina(int inicio, int quantia){
	return this.session.createCriteria(PingTeste.class).setMaxResults(quantia).setFirstResult(inicio).list();
	
}

public void fechaConcexao(){
	this.session.close();
}

}

quando eu executo os métodos dentro das minhas ACTIONS me é mostrado e seguinte erro…

exception

javax.servlet.ServletException: org.hibernate.validator.event.ValidateEventListener

org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)

org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)

org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)

org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)

org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)

javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

javax.servlet.http.HttpServlet.service(HttpServlet.java:810)

org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

root cause

java.lang.ClassCastException: org.hibernate.validator.event.ValidateEventListener

org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:783)

sms.servermonitor.DAO.ServerFactory.getSession(ServerFactory.java:15)

sms.servermonitor.Action.AdicionaDadosAction.execute(AdicionaDadosAction.java:23)

org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)

org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)

org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)

org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)

javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

javax.servlet.http.HttpServlet.service(HttpServlet.java:810)

org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
S

Alguem pode me ajudar sobre o problema acima ???

Criado 22 de outubro de 2007
Ultima resposta 24 de out. de 2007
Respostas 12
Participantes 3