Hibernate e tratamento de campos not nulls (preciso de ajuda)

1 resposta
Lavieri

Oi pessoal, estou com um problema bem simples... mais não consegui achar a solução ...

Estou usando Hibernate, e estou kerendo adcionar 1 objeto a minha tabela, só que os campos na tabale são NOT NULL, e quero manter isso, porem, [color=red]quando vou inserir dados na tabela, eu gostaria que se o campo fosse nulo, ele seguisse o valor padrão setado na tabela da tabela.[/color]

mesmo quando as propriedades do objetos são nulas ele tenta inserir como nulo, segue o pekeno código abaixo

public class Teste3 {
	public static void main(String[] args) {
		Session session = HibernateUtil.getSession();
		Telefone t = new Telefone();
		t.setTelefone("33332222");
		Transaction tx = session.beginTransaction(); //Cria transação
		session.save(t);
		tx.commit();
	}
}
A saida do hibernate foi
Hibernate: insert into telefone (telefone_DDD, telefone_DDI, telefone_fax, telefone_mobilidade, telefone_numero) values (null, null, null, null, "33332222")
[color=red]porem a minha intenção é que quando os valores sejam nulos no momento do insert, ele simplismente subtraia esses campos do insert eu esperava algo como:[/color]
Hibernate: insert into telefone (telefone_numero) values ("33332222")

pois ai nesse caso os valores padrões seriam assumidos pelos campos nulos no momento do INSERT. queria q não fosse necessario setar valores para outras propriedades do telefone.

estou usando Hibernate Annotation, porem se alguem sober a solução sem Annotation sem problemas, só queria saber a solução para ele suprimir, apenas no momento do insert, os valores nulos, pelos valores no banco de dados.

abaixo segue os códigos de criação da tabela, um screen da tabela, e o código do objeto Telefone

Ps.: Desde já agradeço qualquer ajuda

[img]http://img125.imageshack.us/img125/6720/tabelatn4.gif[/img]
CREATE  TABLE IF NOT EXISTS `simrenta_myfactory`.`telefone` (
  `telefone_id` BIGINT NOT NULL AUTO_INCREMENT ,
  `telefone_fax` INT(3) NOT NULL DEFAULT 1 ,
  `telefone_mobilidade` INT(3) NOT NULL DEFAULT 1 ,
  `telefone_DDI` VARCHAR(5) NOT NULL DEFAULT '55' ,
  `telefone_DDD` VARCHAR(5) NOT NULL DEFAULT '83' ,
  `telefone_numero` VARCHAR(20) NOT NULL ,
  PRIMARY KEY (`telefone_id`) ,
  UNIQUE INDEX `u_telefone_DDI_DDD_numero` (`telefone_DDI` ASC, `telefone_DDD` ASC, `telefone_numero` ASC) ,
  INDEX `fk_telefone_telefoneFax` (`telefone_fax` ASC) ,
  INDEX `fk_telefone_telefoneMobilidade` (`telefone_mobilidade` ASC) ,
  CONSTRAINT `fk_telefone_telefoneFax`
    FOREIGN KEY (`telefone_fax` )
    REFERENCES `simrenta_myfactory`.`telefoneFax` (`telefoneFax_id` )
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
  CONSTRAINT `fk_telefone_telefoneMobilidade`
    FOREIGN KEY (`telefone_mobilidade` )
    REFERENCES `simrenta_myfactory`.`telefoneMobilidade` (`telefoneMobilidade_id` )
    ON DELETE RESTRICT
    ON UPDATE CASCADE)
ENGINE = InnoDB
Objeto Telefone
package com.tomazlavieri.myfactory.dominio.util;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name="telefone")
public class Telefone {
	/**
	 * Número de identificacao interno do telefone no banco de dados
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="telefone_id")
	private int identificacao;
	/**
	 * 
	 */
	@ManyToOne
	@JoinColumn(name="telefone_mobilidade")
	private TelefoneMobilidade mobilidade;
	@ManyToOne
	@JoinColumn(name="telefone_fax")
	private TelefoneFax fax;
	@Column(name="telefone_DDI")
	private String codigoDDI;
	@Column(name="telefone_DDD")
	private String codigoDDD;
	@Column(name="telefone_numero")
	private String telefone;
	public Telefone() {}
	/**
	 * @param identificacao the identificacao to set
	 */
	public void setIdentificacao(int identificacao) {
		this.identificacao = identificacao;
	}
	/**
	 * @return the identificacao
	 */
	public int getIdentificacao() {
		return identificacao;
	}
	/**
	 * @param mobilidade the mobilidade to set
	 */
	public void setMobilidade(TelefoneMobilidade mobilidade) {
		this.mobilidade = mobilidade;
	}
	/**
	 * @return the mobilidade
	 */
	public TelefoneMobilidade getMobilidade() {
		return mobilidade;
	}
	/**
	 * @param fax the fax to set
	 */
	public void setFax(TelefoneFax fax) {
		this.fax = fax;
	}
	/**
	 * @return the fax
	 */
	public TelefoneFax getFax() {
		return fax;
	}
	/**
	 * @param codigoDDI the codigoDDI to set
	 */
	public void setCodigoDDI(String codigoDDI) {
		this.codigoDDI = codigoDDI;
	}
	/**
	 * @return the codigoDDI
	 */
	public String getCodigoDDI() {
		return codigoDDI;
	}
	/**
	 * @param codigoDDD the codigoDDD to set
	 */
	public void setCodigoDDD(String codigoDDD) {
		this.codigoDDD = codigoDDD;
	}
	/**
	 * @return the codigoDDD
	 */
	public String getCodigoDDD() {
		return codigoDDD;
	}
	/**
	 * @param telefone the telefone to set
	 */
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
	/**
	 * @return the telefone
	 */
	public String getTelefone() {
		return telefone;
	}
}

1 Resposta

Lavieri

Só pra especificar, o que to querendo, é poder dizer para o hibernate que um campo quando nulo não deve aparecer no código SQL quando o campo for NOT NULL

Criado 22 de novembro de 2008
Ultima resposta 23 de nov. de 2008
Respostas 1
Participantes 1