Boa tarde galera,
Bem, estou tendo um problema desde sexta-feira, e pode até ser que seja até facil, (sabe quando voce nao acha o erro e chama outra pessoa para que te ajude e de repente ela diz, o problema ta alí ó!!..rsrsrs) mas imagino que por ficar obcecado para que funcione nao estou vendo a solução e nem as pessoas que perguntei entao recorro a vocês superGujianos!
Tenho uma classe Funcionário
public class Funcionario implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "funcodigo", nullable = false)
private Integer funcodigo;
@Column(name = "funlogin", length = 30)
private String funlogin;
@Column(name = "funsenha", length = 30)
private String funsenha;
@JoinColumn(name = "pescodigo", referencedColumnName = "pescodigo", nullable = false)
@ManyToOne(cascade = CascadeType.MERGE)
private Pessoa pescodigo = new Pessoa();
@JoinColumn(name = "carcodigo", referencedColumnName = "carcodigo")
@ManyToOne
private Cargo carcodigo = new Cargo();
//Getters and Setters existem mas nao os colocarei para que a visualização se torne mais facil...
}
E uma classe Pessoa
public class Pessoa implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "pescodigo", nullable = false)
private Integer pescodigo;
//Campo que define se a pessoa esta Ativa ('A') ou Inativa ('I')
@Column(name = "pesstatus")
private Character pesstatus;
@Column(name = "pesnome", length = 60)
private String pesnome;
@Column(name = "pesfantasia", length = 120)
private String pesfantasia;
@Column(name = "pesemail", length = 120)
private String pesemail;
@Column(name = "pescpfcnpj", length = 18)
private String pescpfcnpj;
@Column(name = "pesrgie", length = 17)
private String pesrgie;
@Column(name = "pestipo")
private Character pestipo;
@Column(name = "pessite", length = 120)
private String pessite;
@OneToMany(mappedBy = "pescodigo")
private List<Fornecedor> fornecedorList;
@OneToMany(mappedBy = "pescodigo")
private List<Transportadora> transportadoraList;
@OneToMany(mappedBy = "pescodigo")
private List<Funcionario> funcionarioList;
@OneToMany(mappedBy = "pescodigo")
private List<Cliente> clienteList;
@OneToMany(mappedBy = "pescodigo", cascade = CascadeType.MERGE, targetEntity = EnderecoPessoa.class)
private List<EnderecoPessoa> enderecoPessoaList = new ArrayList<EnderecoPessoa>();
@OneToMany(mappedBy = "pescodigo", cascade = CascadeType.MERGE, targetEntity = Telefone.class)
private List<Telefone> telefoneList = new ArrayList<Telefone>();
@OneToMany(mappedBy = "pescodigo", cascade = CascadeType.MERGE, targetEntity = PessoaInscricaomunicipal.class)
private List<PessoaInscricaomunicipal> pessoaInscricaomunicipalList = new ArrayList<PessoaInscricaomunicipal>();
//Getters and Setters existem mas nao os colocarei para que a visualização se torne mais facil...
}
e uma classe Telefone
public class Telefone implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "telcodigo", nullable = false)
private Integer telcodigo;
@Column(name = "telcontato", length = 60)
private String telcontato;
@Column(name = "telnumero", length = 14)
private String telnumero;
@JoinColumn(name = "pescodigo", referencedColumnName = "pescodigo", nullable=false)
@ManyToOne
private Pessoa pescodigo;
//Getters and Setters existem mas nao os colocarei para que a visualização se torne mais facil...
}
Tenho um ManagedBean pessoaMB com o código para salvar funcionario
public void salvarFuncionario() {
this.funcionario.getPescodigo().setPesstatus('A');
this.funcionario.getPescodigo().setPestipo('F');
this.funcionario.getPescodigo().setTelefoneList(getPessoa().getTelefoneList());
this.funcionario.getPescodigo().setEnderecoPessoaList(getPessoa().getEnderecoPessoaList());
//Verifico se o que retorna do salvar tem código, pois se NÃO tiver ocorreu alguma falha
if (FuncionarioDAO.getInstance().salvar(funcionario).getFuncodigo() != null) {
this.setFuncionario(new Funcionario());
this.setPessoa(new Pessoa());
this.setModal(new Modal("Cadastrado com sucesso!", "250", "100", "margin-left: 38%;"));
} else {
this.setModal(new Modal("Ops, ocorreu um erro. Tente novamente!", "340", "100", "margin-left: 42%;"));
}
}
Bem. esta é a estrutura do meu código e quero salvar este objeto Funcionário mas infelizmente me ocorre o erro:
java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: br.com.mottabox.modelo.Pessoa
Mas ao tentar salvar apenas uma pessoa com a listagem de telefones esta pessoa é salva. E porque eu tento salvar o funcionário que contém a pessoa com a listagem de telefones e o JPA nao salva?
Busquei ajuda na internet e achei no blog da caelum um artigo do Paulo: http://blog.caelum.com.br/transientobjectexception-lazyinitializationexception-e-outras-famosas-do-hibernate/
e também aki no forum achei duvidas como esta: http://www.guj.com.br/java/142805-object-references-an-unsaved-transient-instance—save-the-transient-instance-before-flushing
Mas ao tentar resolver eu nao estou conseguindo, por favor ajudem-me.
Obrigado pela atenção de todos.
e fiquem na Paz de DEUS.