Ajuda com exception org.hibernate.TransientObjectException[RESOLVIDO]

0 respostas
boneazul

pessoal estou tomando a seguinte exception com o hibernate

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.com.ddns.fonaudio.models.Contato

seguinte tenho a relacao 1 - N de empresa e contatos e ou seja 1 empresa pode ou não ter varios contatos estou usando o vraptor 3 e fiz alguns debug e ele esta populando corretamente os filhos com os valores só que na hora de salvar o objeto empresa tomo essa exception
vo postar as classes pra ver se voces me ajudam a resolver o problema

Contato.java

package br.com.ddns.fonaudio.models;

import javax.persistence.Column;


import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="fax_contatotelefonico")
public class Contato {
	@Id
    @GeneratedValue
    @Column(name="con_id")
	Long id;
	@Column(name="con_telefone")
	String telefone;
	@Column(name="con_tipocontato")
	char tipo='R';
	@Column(name="con_ativo")
	char ativo='S';
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getTelefone() {
		return telefone;
	}
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
	public char getTipo() {
		return tipo;
	}
	public void setTipo(char tipo) {
		this.tipo = tipo;
	}
	public char getAtivo() {
		return ativo;
	}
	public void setAtivo(char ativo) {
		this.ativo = ativo;
	}
	
}

Empresa.java

package br.com.ddns.fonaudio.models;
import java.util.List;


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name="fax_empresa")
public class Empresa {
	@Id
    @GeneratedValue
    @Column(name="emp_id")
	private Long id;
	@Column(name="emp_nomefantasia",nullable=false)
	private String nomefantasia;
	@Column(name="emp_cnpj",nullable=false)
	private String cnpj;
	@Column(name="emp_email")
	private String email;
	@Column(name="emp_razaosocial")
	private String razaosocial;
	@Column(name="emp_cidade")
	private String cidade;
	@Column(name="emp_bairro")
	private String bairro;
	@Column(name="emp_endereco")
	private String endereco;
	@Column(name="emp_ativo",nullable=false)
	private char ativo='S';
	
	@OneToMany
	@JoinColumn(name="emp_id")
	private  List<Contato> contatos;
	
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNomefantasia() {
		return nomefantasia;
	}

	public void setNomefantasia(String nomefantasia) {
		this.nomefantasia = nomefantasia;
	}

	public String getCnpj() {
		return cnpj;
	}

	public void setCnpj(String cnpj) {
		this.cnpj = cnpj;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getRazaosocial() {
		return razaosocial;
	}

	public void setRazaosocial(String razaosocial) {
		this.razaosocial = razaosocial;
	}

	public String getCidade() {
		return cidade;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public String getBairro() {
		return bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public String getEndereco() {
		return endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	
	public List<Contato> getContatos() {
		return contatos;
	}
	
	public void setContatos(List<Contato> contatos) {
		this.contatos = contatos;
	}
	
	
	public char getAtivo() {
		return ativo;
	}
	public void setAtivo(char ativo) {
		this.ativo = ativo;
	}
	
}

GenerateDatabase.java

package br.com.ddns.fonaudio.util;

import java.math.BigInteger;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;

import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.hibernate.tool.hbm2ddl.SchemaExport;

import br.com.ddns.fonaudio.models.Contato;
import br.com.ddns.fonaudio.models.Empresa;
import br.com.ddns.fonaudio.models.Usuario;

public class GenerateDatabase {
	public static void main(String[] args) throws NoSuchAlgorithmException{
		Configuration conf = new AnnotationConfiguration();
		conf.configure();
		SchemaExport se = new SchemaExport(conf);
		se.create(true, true);
		
		Usuario admin=new Usuario();
		admin.setLogin("admin");
		admin.setSenha("123456");
		MessageDigest md = MessageDigest.getInstance("MD5");  
    	BigInteger hash = new BigInteger(1, md.digest(admin.getSenha().getBytes()));  
    	admin.setSenha(hash.toString(16));
    	
    	
    	Empresa emp=new Empresa();
    	emp.setNomefantasia("SHANKINHA");
    	emp.setCnpj("00.000.00");
    	Contato c1=new Contato();
    	c1.setTipo('R');
    	c1.setTelefone("[telefone removido]");
    	ArrayList<Contato> lista = new ArrayList<Contato>();
    	lista.add(c1);
    	emp.setContatos(lista);
    	
    	SessionFactory factory = conf.buildSessionFactory();
    	Session session = factory.openSession();
    	Transaction transaction = null;
		try {
			transaction = session.beginTransaction();
			session.save(admin);
			session.save(emp);
			transaction.commit();
		} finally {
			if (transaction != null && transaction.isActive()) {
				transaction.rollback();
			}
			session.close();
		}
	}
}

espero que alguem consiga me ajudar…abraços…

Já consegui resolver o problema era no mapeamento @oneToMany faltou falar o tipo de cascade que ele tinha que fazer para os filhos foi so adicionar @Cascade(CascadeType.ALL) que ele fez corretamente…obrigado mesmo assim…

Criado 2 de dezembro de 2009
Respostas 0
Participantes 1