quinta-feira, 1 de julho de 2010

Hibernate: dynamicUpdate e dynamicInsert

O que é?

Com o Hibernate é possível detectar as propriedades que foram modificadas, e gerar uma declaração SQL UPDATE/INSERT somente com essas colunas. Com esse recurso você pode ter algum ganho de performance. Por padrão esse recurso vem desabilitado, com isso, o Hibernate inclui “todas” as propriedades definidas na sua classe em uma SQL UPDATE/INSERT.

Configurando!

Para ativar o recurso de geração dinâmica de SQL basta adicionar o mapeamento (dynamicUpdate=true e/ou dynamicInsert=true) no mapeamento de sua classe:

@Entity
@org.hibernate.annotations.Entity(dynamicUpdate=true, dynamicInsert=true)
public class Moeda implements Serializable {

Quando utilizar esse recurso?

Utilize esse recurso em tabelas com grande quantidade de colunas (ex: mais de 50), ou em tabelas com grandes quantidades de dados (ex: campos Blob de texto/imagem).

2 comentários:

  1. Bom dia alexandre,

    Estou com um problema no dynamicUpdate, hj no meu ambiente de desenvolvimento utilizando dynamicUpdate=true obtinho sucesso no update setando apenas o valor alterado no momento da atualização.
    A mesma classe em produção esta se comportando diferente, monta o update com varios atributos que não foi informado.

    Notei q na anotação da classe existe uma quebra de linha isto poderia estar gerando não habilitar este recurso?

    Ambiente desenvolvimento: weblogic 10.3 windows
    Ambiente produção: weblogic 10.3 unix

    Segue codigo:

    * @hibernate.class table = "LOG_PROCESSO" dynamic-insert = "true" dynamic-update =
    * "true" lazy="true" schema="netmed"

    Att,
    Wesley Santos

    ResponderExcluir
  2. Olá,

    Não acredito que o problema esteja ocorrendo devido a quebra de linha. Mas não custa testar, tente deixar tudo em uma única linha.

    ResponderExcluir