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…