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.
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 ','.
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 ???
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…