Inserir valores nulos no hibernate

3 respostas
filipeandrep

Prezados,

tenho um caso de uso de cadastro que desejo colocar valores nulos para os atributos que possuem relacionamentos e tanto no momento de inclusão quanto o de recuperação do registro estou tendo problemas. Há alguma forma de setar um relacionamento @ManyToOne para receber valores nulos?
Segue abaixo a minha classe com as devidas configurações:

package br.gov.inca.publico.bean;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;




/**
 *
 * @author mmaciel
 */

@SuppressWarnings("serial")
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@SequenceGenerator(name = "SEQUENCE", sequenceName = "pub_agente_id_agente_seq", allocationSize=1)
@Table(name = "pub_agente")
public class Agente {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQUENCE")
    @Column(name = "id_agente")
    private int id;
    
    @Column(name = "cd_cpf_agente")
    private String cpf;
    
    @Column(name = "nm_agente")
    private String nome;
    
    @Column(name = "ds_ddd_telefone_residencia")
    private String dddTelefoneResidencial;
    
    @Column(name = "ds_telefone_residencia")
    private String telefoneResidencial;
    
    @Column(name = "ds_ddd_telefone_celular")
    private String dddTelefoneCelular;
    
    @Column(name = "ds_telefone_celular")
    private String telefoneCelular;
    
    @Column(name = "ds_ddd_telefone_comercial")
    private String dddTelefoneComercial;
    
    @Column(name = "ds_telefone_comercial")
    private String telefoneComercial;
    
    @Column(name = "ds_endereco_residencia")
    private String enderecoResidencial;
    
    @Column(name = "ds_numero_residencia")
    private String numeroResidencial;
    
    @Column(name = "ds_complemento_residencia")
    private String complementoResidencial;
    
    @Column(name = "ds_bairro_residencia")
    private String bairroResidencial;
    
    @Column(name = "cd_cep_residencia")
    private String cepResidencial;
    
    @Column(name = "ds_endereco_comercial")
    private String enderecoComercial;
    
    @Column(name = "ds_numero_comercial")
    private String numeroComercial;
    
    @Column(name = "ds_complemento_comercial")
    private String complementoComercial;
    
    @Column(name = "ds_bairro_comercial")
    private String bairroComercial;
    
    @Column(name = "cd_cep_comercial")
    private String cepComercial;
    
    @Column(name = "ds_email")
    private String email;
    
    @ManyToOne(cascade=CascadeType.PERSIST,optional=true)
    @JoinColumn(name="cd_municipio_residencia",nullable=true)
    private Municipio municipioResidencial;

    @ManyToOne(cascade=CascadeType.PERSIST,optional=true)
    @JoinColumn(name="cd_municipio_comercial",nullable=true)
    private Municipio municipioComercial;
    
    @ManyToOne(cascade=CascadeType.PERSIST)
    @JoinColumn(name="id_escolaridade")
    private Escolaridade escolaridade;
    public Agente() {
    }
    public int getId() {
        return id;
    }
    
    public void setId(int id) {
        this.id = id;
    }
    
    public String getCpf() {
        return cpf;
    }
    
    public void setCpf(String cpf) {
        this.cpf = cpf;
    }
    
    public String getNome() {
        return nome;
    }
    
    public void setNome(String nome) {
        this.nome = nome;
    }
    
    public String getTelefoneResidencial() {
        return telefoneResidencial;
    }
    
    public void setTelefoneResidencial(String telefoneResidencial) {
        this.telefoneResidencial = telefoneResidencial;
    }
    
    public String getTelefoneCelular() {
        return telefoneCelular;
    }
    
    public void setTelefoneCelular(String telefoneCelular) {
        this.telefoneCelular = telefoneCelular;
    }
    
    public String getTelefoneComercial() {
        return telefoneComercial;
    }
    
    public void setTelefoneComercial(String telefoneComercial) {
        this.telefoneComercial = telefoneComercial;
    }
    
    public String getEnderecoResidencial() {
        return enderecoResidencial;
    }
    
    public void setEnderecoResidencial(String enderecoResidencial) {
        this.enderecoResidencial = enderecoResidencial;
    }
    
    public String getComplementoResidencial() {
        return complementoResidencial;
    }
    
    public void setComplementoResidencial(String complementoResidencial) {
        this.complementoResidencial = complementoResidencial;
    }
    
    public String getBairroResidencial() {
        return bairroResidencial;
    }
    
    public void setBairroResidencial(String bairroResidencial) {
        this.bairroResidencial = bairroResidencial;
    }
    
    public String getCepResidencial() {
        return cepResidencial;
    }
    
    public void setCepResidencial(String cepResidencial) {
        this.cepResidencial = cepResidencial;
    }
    
    public String getEnderecoComercial() {
        return enderecoComercial;
    }
    
    public void setEnderecoComercial(String enderecoComercial) {
        this.enderecoComercial = enderecoComercial;
    }
    
    public String getComplementoComercial() {
        return complementoComercial;
    }
    
    public void setComplementoComercial(String complementoComercial) {
        this.complementoComercial = complementoComercial;
    }
    
    public String getBairroComercial() {
        return bairroComercial;
    }
    
    public void setBairroComercial(String bairroComercial) {
        this.bairroComercial = bairroComercial;
    }
    
    public String getCepComercial() {
        return cepComercial;
    }
    
    public void setCepComercial(String cepComercial) {
        this.cepComercial = cepComercial;
    }
    
//    public UF getUfResidencial() {
//        return ufResidencial;
//    }
//
//    public void setUfResidencial(UF ufResidencial) {
//        this.ufResidencial = ufResidencial;
//    }
    
    public Municipio getMunicipioResidencial() {
        return municipioResidencial;
    }
    
    public void setMunicipioResidencial(Municipio municipioResidencial) {
        this.municipioResidencial = municipioResidencial;
    }
    
//    public UF getUfComercial() {
//        return ufComercial;
//    }
//
//    public void setUfComercial(UF ufComercial) {
//        this.ufComercial = ufComercial;
//    }
    
    public Municipio getMunicipioComercial() {
        return municipioComercial;
    }
    
    public void setMunicipioComercial(Municipio municipioComercial) {
        this.municipioComercial = municipioComercial;
    }
    
    public Escolaridade getEscolaridade() {
        return escolaridade;
    }
    
    public void setEscolaridade(Escolaridade escolaridade) {
        this.escolaridade = escolaridade;
    }
    
    public String getDddTelefoneResidencial() {
        return dddTelefoneResidencial;
    }
    
    public void setDddTelefoneResidencial(String dddTelefoneResidencial) {
        this.dddTelefoneResidencial = dddTelefoneResidencial;
    }
    
    public String getDddTelefoneCelular() {
        return dddTelefoneCelular;
    }
    
    public void setDddTelefoneCelular(String dddTelefoneCelular) {
        this.dddTelefoneCelular = dddTelefoneCelular;
    }
    
    public String getDddTelefoneComercial() {
        return dddTelefoneComercial;
    }
    
    public void setDddTelefoneComercial(String dddTelefoneComercial) {
        this.dddTelefoneComercial = dddTelefoneComercial;
    }
    
    public String getNumeroResidencial() {
        return numeroResidencial;
    }
    
    public void setNumeroResidencial(String numeroResidencial) {
        this.numeroResidencial = numeroResidencial;
    }
    
    public String getNumeroComercial() {
        return numeroComercial;
    }
    
    public void setNumeroComercial(String numeroComercial) {
        this.numeroComercial = numeroComercial;
    }
    
    public String getEmail() {
        return email;
    }
    
    public void setEmail(String email) {
        this.email = email;
    }
}

3 Respostas

_fs

Pelo que vi seu código deveria ser suficiente.

Está ocorrendo algum erro?
Como você está fazendo o update?

filipeandrep

está dando um erro de transient exception para as propriedades de municipio. Segue o codigo do inserir e atualizar:

public Long inserir(T obj) throws Exception {
        Long resultado = new Long(0);
        Session session = CreateSession.getSession();
        CreateSession.beginTransaction();
        resultado = (Long) session.save(obj);
        log.info("Inserindo ou atualizando um objeto...");
        log.debug(obj);
        CreateSession.commitTransaction();
        log.info("Objeto inserido ou atualizado!");
        CreateSession.closeSession();
        return resultado;
    }

    public boolean atualizar(T obj) throws Exception {
        boolean result = false;
        Session session = CreateSession.getSession();
        CreateSession.beginTransaction();
        session.flush();
        session.clear();
        session.update(obj);
        session.flush();
        log.info("Atualizando um objeto...");
        log.debug(obj);
        result = CreateSession.commitTransaction();
        log.info("Objeto Atualizado!");
        CreateSession.closeSession();
        return result;
    }
_fs

Essa exceção é bem genérica. Pode postar o StackTrace inteiro?

E ficou uma dúvida: onde você seta o relacionamento como null? O “T obj” recebido pelos métodos está transiente?

E uma pergunta: qual a função das linhas 18, 19 e 21?

Criado 7 de abril de 2008
Ultima resposta 7 de abr. de 2008
Respostas 3
Participantes 2