Re:Não atualizar valor de um campo se o atributo relacionado estiver NULL

Cara, eu não entendi direito seu problema.

Pelo que eu vi vc não quer escrever no campo específico se ele estiver com alguma coisa ‘null’ dentro, correto?

Se for isso, tem um tópico similar aqui:

http://www.guj.com.br/posts/list/110686.java#597039

No qual podemos encontrar:

[quote=maquiavelbona]Faça a busca no banco pelo código que você quer inserir e pegue o ResultSet. Aí você pode tentar algo assim:

if(meuResultSet.next()){System.out.println("Droga, já existe o código.");} else{System.out.println("Euba! Posso inserir esse código");}
Isso porque na documentação da classe ResultSet ( ler documentação é bom e salva uma araucária ) diz que o método next() retorna true caso consiga mover para o próximo registro ( no começo ele não aponta para nada ) e false caso não consiga. Se não conseguir não tem registro! Se não tem registro não tem código! Se não tem código… ah cansei. Mas então, é essa a idéia.

Até![/quote]

Ou seja, antes de escrever tenta dar um next(), se a resposta do next() mostrar que é null, não faça nada :slight_smile:

Acho que ele quer é dado um registro no banco de dados, ele quer atualizá-lo mas somente os campos de entrada que não são nulos (por isso não quer perder informação).
Eu acho que a abordagem mais tranquila é: na hora que você pega pela primeira vez o dado para mostrar para o cliente, guarde esse objeto e mesmo que ele apague o valor do textbox você verifica no seu objeto se é um valor válido ou não. Mas se não tiver como ter esses dados por antecedência acho que não tem como você pedir para ele atualizar seletivamente os campos (deve até ter mas não sei como).

Até!

[quote=maquiavelbona]Acho que ele quer é dado um registro no banco de dados, ele quer atualizá-lo mas somente os campos de entrada que não são nulos (por isso não quer perder informação).
Eu acho que a abordagem mais tranquila é: na hora que você pega pela primeira vez o dado para mostrar para o cliente, guarde esse objeto e mesmo que ele apague o valor do textbox você verifica no seu objeto se é um valor válido ou não. Mas se não tiver como ter esses dados por antecedência acho que não tem como você pedir para ele atualizar seletivamente os campos (deve até ter mas não sei como).

Até![/quote]

Entendi agora o que ele queria.

Deixa pra lá então a minha mensagem, mas fica aí marcado para posteridade :wink:

Então, deve ter algo assim para algum banco de dados específico e o Hibernate não trataria disso. Talvez se você fizesse uma Stored Procedure que você manda os valores e o banco se vira para interpretar a entrada e atualizar o que deve pode ser uma solução com somente uma chamada ao DB.

Até!

Boa tarde pessoal,

Embora minha necessidade seja bem simples, receio que seja meio complicado de implementar:

A verdade é que, para algumas entidades muito específicas da minha aplicação, gostaria de montar o SQL UPDATE sob demanda, pois, em algumas situações, o valor de um determinado campo está NULL e eu não posso descartar o valor que já está no banco de dados.

Sinceramente, já pensei em algumas formas porcas de fazer, como consultar o estado atual no BD e sair comparando, para copiar para minha entidade o valor que está lá, se este for NULL.

Mas o que eu queria mesmo era escrever esse UPDATE. Seria a melhor forma, ao meu ver, pois não faria um acesso extra ao banco.
Pensei em listener, em interceptor, mas não quero reagir a um evento; mas sim sobrescrever o processo padrão.

Será que isso é possível?

Um grande abraço

Fala brother,

Na verdade não é isso não…

O que eu quero fazer é o seguinte:

Dada minha entidade Ent com os atributos ID, NM, DS; e considerando que já existe um registro na base com ID igual 100, se eu executar o seguinte código:

Session session = HibernateUtils.getSession();
Ent ent = (Ent) session.get(Ent.class, 100);

ent.setNm(null);
session.beginTransaction();
session.merge(c);
session.getTransaction().commit();
session.close();

O trabalho do Hibernate, ao invés de ser:

Eu gostaria que fosse:

Entendeu?

No momento de atualização, ele perceber que o valor do meu campo é NULL e, por causa disso, não colocar no UPDATE. Imagino que eu poderia fazer uma anotação para customizar isso.

Note que eu não quero marcar meu campo como updatable = false, porque eu quero permitir que se atualize, mas não quero permitir que se apague o que já existe.

Valeu pela atenção cara…

[quote=maquiavelbona]Acho que ele quer é dado um registro no banco de dados, ele quer atualizá-lo mas somente os campos de entrada que não são nulos (por isso não quer perder informação).
Eu acho que a abordagem mais tranquila é: na hora que você pega pela primeira vez o dado para mostrar para o cliente, guarde esse objeto e mesmo que ele apague o valor do textbox você verifica no seu objeto se é um valor válido ou não. Mas se não tiver como ter esses dados por antecedência acho que não tem como você pedir para ele atualizar seletivamente os campos (deve até ter mas não sei como).

Até![/quote]

A minha idéia é essa mesma cara…
Não queria ter que ficar usando uma sessão HTTP pra isso… :?

Continuo procurando…

[quote=maquiavelbona]Então, deve ter algo assim para algum banco de dados específico e o Hibernate não trataria disso. Talvez se você fizesse uma Stored Procedure que você manda os valores e o banco se vira para interpretar a entrada e atualizar o que deve pode ser uma solução com somente uma chamada ao DB.

Até![/quote]
Verdade cara… Mas receio que nesse caso, uma trigger before update seja o ideal… dessa forma eu nem deveria fazer named sql no hibernate.
Pode ser que funcione…

Vou testar…