Hibernate: update/merge somente em alguns campos

Olá… tenho a mesma dúvida que este antigo tópico, mas não achei solução: http://www.guj.com.br/posts/list/15/27331.java

Basicamente tenho uma tabela no banco de dados e um objeto mapeado para ele.

Quero alterar uma entrada nessa tabela, entao crio um objeto, seto seu id e 2 campo que quero alterar, e o hibernate “nula” todos os outros campos daquela entrada!

Fazer o “load” ou um “select” para tal objeto é um custo muito desnecessário, pois tem vários campos, e a ação é efetuada a todo o momento. Existe como alterar somente os campos que eu quero sem precisar fazer um “UPDATE” na mão?

Dei uma pesquisada e nao achei. :stuck_out_tongue:

Além do mais, ocasiona erro ao fazer UPDATE por HQL. Pode ser problema do driver SqlServer. No SQL gerado ele insere uma virgula logo após o nome da tabela (classe), e me retorna erro.

Da HQL:

UPDATE Objeto obj SET obj.valor = :valor WHERE obj.id = :idObjeto

Me retorna a SQL e o erro:

update TB_TABELA,  set TB_VALOR=? where TB_ID=?

SQL Error: 102, SQLState: S0001
Incorrect syntax near ','.

vlw!!
jopss

Só para constar, o problema da “virgula” não se resolveu.

Mas, consegui fazer o que eu queria usando o atributo dynamic-update=“true” (XML) no mapemaneto da classe. Com isso eu faço session.get (hibernate) para retornar o objeto “novo” com o id, insiro somente os campos necessários e uso o update normalmente.

Funfo!!

Mas, Verifiquei na net que tem vários post sobre problemas com “dynamic-update”, mas não cheguei a ver todos os erros… alguem já obteve algum problema usando-o ???

Vc pode usar um HQL para fazer update só nos campos que vc quer.

Use o createQuery do hibernate

http://www.hibernate.org/hib_docs/reference/en/html/batch-direct.html

pois é… no caso o HQL ocorre o problema que mencionei… da “virgula”…

e tbm não funfo como queria ainda!!
o “get” do hibernate me retorna o objeto populado. Pensei que retornaria somente uma referencia com seu id… Então é como se eu fizesse um select ou load…

inda não foi dessa vez… :lol:

jopss

[quote]jopss[/quote],

o statement de update está errado:

não coloque a vírgula após o nome da tabela. acho que isso não funciona nem com sql.

[]s
Liss

entao, quem faz essa “caca” ae é o hibernate!
eu faço o HQL com os objetos e ele me retorna isso…

:lol:
jopss