Pessoal, estou encontrando problemas para atualizar uma base de dados. Tentei usar uma sessao e duas tb(uma para buscar o objeto, usando o metodo load() e outra para atualizar o objeto a ser persistido, usando o metodo update()) mas das duas formas nao funcionou. As ultimas linhas impressas pelo log4j sao:
2004-08-20 16:03:30,656 DEBUG hibernate.impl.SessionImpl -> opened session
2004-08-20 16:03:30,665 DEBUG hibernate.impl.SessionImpl -> loading [Usuarios#2]
2004-08-20 16:03:30,667 DEBUG hibernate.impl.SessionImpl -> attempting to resolve [Usuarios#2]
2004-08-20 16:03:30,675 DEBUG hibernate.impl.SessionImpl -> object not resolved in any cache [Usuarios#2]
2004-08-20 16:03:30,676 DEBUG hibernate.persister.EntityPersister -> Materializing entity: [Usuarios#2]
2004-08-20 16:03:30,693 DEBUG hibernate.impl.BatcherImpl -> about to open: 0 open PreparedStatements, 0 open ResultSets
2004-08-20 16:03:30,694 DEBUG hibernate.connection.DriverManagerConnectionProvider -> total checked-out connections: 0
2004-08-20 16:03:30,694 DEBUG hibernate.connection.DriverManagerConnectionProvider -> using pooled JDBC connection, pool size: 0
2004-08-20 16:03:30,694 DEBUG sf.hibernate.SQL -> select usuarios0_.codigo as codigo0_, usuarios0_.nome as nome0_, usuarios0_.idade as idade0_, usuarios0_.email as email0_, usuarios0_.endereco as endereco0_, usuarios0_.cidade as cidade0_, usuarios0_.estado as estado0_, usuarios0_.cep as cep0_, usuarios0_.dt_inc as dt_inc0_, usuarios0_.hr_inc as hr_inc0_, usuarios0_.user_inc as user_inc0_, usuarios0_.dt_alt as dt_alt0_, usuarios0_.hr_alt as hr_alt0_, usuarios0_.user_alt as user_alt0_, usuarios0_.situation as situation0_ from usuarios usuarios0_ where usuarios0_.codigo=?
2004-08-20 16:03:30,695 DEBUG hibernate.impl.BatcherImpl -> preparing statement
2004-08-20 16:03:30,939 DEBUG hibernate.type.IntegerType -> binding ‘2’ to parameter: 1
e trava nesse ponto…Estou me baseando pelo hibernate_reference.pdf, se alguem tiver alguma dica ou link para material especifico sobre isso…
O problema é o seguinte o hibernate não esta encotrando o classe que vc esta persistindo (eu vi isto por que no final da qiuery existe um usuario ?)
é simples de entender vc provavelmente esta fazendo load em classe passando algum ID só que quando o H faz a select no BD ele nao encontra nen hum registro e gera esta exceção.
:lol:
naum consegui dessa forma, entaum tentei assim, usei os seguintes metodos para obter o usuario e atualizar o objeto:
public Usuarios retrieve(String pk) throws HibernateException{
Session session = factory.openSession();
Usuarios usuario = (Usuarios)session.load(Usuarios.class,pk); //me parece q trava aqui, pois coloquei um print apos essa linha e naum imprimi
session.flush();
session.close();
return usuario;
}
public void updates(Usuarios usuario) throws Exception{
Session session = factory.openSession();
session.update(usuario);
session.flush();
session.close();
}
obtenho o objeto assim :
Usuarios usuarios = (Usuarios) dao.retrieve(conds[1]); onde conds[1] contem o valor da chave primaria a ser utlizada na busca(eu verifiquei e estah passando um valor q reslmente existe no BD).
apos atualizo ele:
usuarios.setDt_inc(data);
usuarios.setHr_inc(hora);
usuarios.setUser_inc(12);
…
…
…
e mando atualizar o BD:
dao.updates(usuarios);
alguem pode me ajudar???
Cara
O load tem q funcionar , mas verifique existe no BD o pk q vc esta procurando ? Atenção existe duplicidade de registro ex: se existe 2 usuarios com o mesmo codigo tambem da pau.
sim, pk eh um campo inteiro(chave primaria), serah q naum dah problema com o fato do metodo load trabalhar com um tipo String e a chave ser do tipo inteiro?
Bom cara eu trabalho com pk do tipo integer e funcionar normal sera q nao é seu mappeamento
Integer miPk = 5;
Persistencia miPersistencia = (Persistencia) sess.load (Persistencia.class, miPK;
Retorna o objeto miPersistencia ponterado no id selecionado.
janselmus,
Para o sess.load(Class classe, Serializable id) você deve informar o id utilizando o tipo correto, se é String, passe String, ser for Integer passe Integer.
Por outro lado, você tem o stacktrace da exceção gerada?