Boa tarde galera,
Estou trabalhando em uma aplicação que escolhi o Hibernate como Framework de persistência.
Já havia trabalhado com ele anteriormente, mas o trabalho era sempre mto doloroso para criar os mapeamentos ou configurar o ant e o XDoclet para gerar automaticamente.
Utilizando as atualizações da API do hibernate, incluindo Annotation e EntityManager, desenvolví este mini framework para o hibernate, onde todas as configurações são feitas de forma bem simples em um .properties, e assim dispensando a criação dos famigerados xml’s de confg e mapeamento. Não preciso usar nenhum xml.
Estou tendo um problema, e imagino q a galera que já está familiarizada com annotations pode me ajudar.
Tenho 2 classes :
/**
* Project Name : Loja
* Class Name : Cliente.java
* Created by : Márcio Alves Barroso | [email removido]
* Created on : 17/03/2006 | 16:22:44
*/
package loja.modelo;
import java.io.Serializable;
import java.sql.Timestamp;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratorType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
/**
* @author Márcio Alves Barroso
*/
@Entity
public class Cliente implements Serializable {
private static final long serialVersionUID = 1L;
private Long idCliente;
private String nome;
private String sobrenome;
private String chamarDe;
private Integer cpfNum;
private Integer cpfDig;
private Timestamp nascimento;
private Long estadoCivil;
private Empresa empresa;
@Column
public Integer getCpfNum() {
return cpfNum;
}
@Column
public Integer getCpfDig() {
return cpfDig;
}
@Column
public String getChamarDe() {
return chamarDe;
}
@ManyToOne(cascade = (CascadeType.MERGE))
@JoinColumn(name="idEmpresa")
public Empresa getEmpresa() {
return empresa;
}
@Column
public Long getEstadoCivil() {
return estadoCivil;
}
@Id(generate = GeneratorType.AUTO)
public Long getIdCliente() {
return idCliente;
}
@Column
public Timestamp getNascimento() {
return nascimento;
}
@Column
public String getNome() {
return nome;
}
@Column
public String getSobrenome() {
return sobrenome;
}
public void setCpfNum(Integer cpfNum) {
this.cpfNum = cpfNum;
}
public void setCpfDig(Integer cpfDig) {
this.cpfDig = cpfDig;
}
public void setChamarDe(String chamarDe) {
this.chamarDe = chamarDe;
}
public void setEmpresa(Empresa empresa) {
this.empresa = empresa;
}
public void setEstadoCivil(Long estadoCivil) {
this.estadoCivil = estadoCivil;
}
public void setIdCliente(Long idCliente) {
this.idCliente = idCliente;
}
public void setNascimento(Timestamp nascimento) {
this.nascimento = nascimento;
}
public void setNome(String nome) {
this.nome = nome;
}
public void setSobrenome(String sobrenome) {
this.sobrenome = sobrenome;
}
}
e esta outra classe :
/**
* Project Name : Loja
* Class Name : Empresa.java
* Created by : Márcio Alves Barroso | [email removido]
* Created on : 17/03/2006 | 16:51:52
*/
package loja.modelo;
import java.io.Serializable;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratorType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
/**
* @author Márcio Alves Barroso
*/
@Entity
public class Empresa implements Serializable {
private static final long serialVersionUID = 1L;
private Long idEmpresa;
private String nome;
private String nomeFantasia;
private Integer cnpjNum;
private Integer cnpjFil;
private Integer cnpjDig;
private Long inscricaoEstadual;
private Set<Cliente> cliente;
@Column
public Integer getCnpjDig() {
return cnpjDig;
}
@Column
public Integer getCnpjFil() {
return cnpjFil;
}
@Column
public Integer getCnpjNum() {
return cnpjNum;
}
@OneToMany(mappedBy="empresa")
public Set<Cliente> getCliente() {
return cliente;
}
@Id(generate= GeneratorType.AUTO)
public Long getIdEmpresa() {
return idEmpresa;
}
@Column
public Long getInscricaoEstadual() {
return inscricaoEstadual;
}
@Column
public String getNome() {
return nome;
}
@Column
public String getNomeFantasia() {
return nomeFantasia;
}
public void setCnpjDig(Integer cnpjDig) {
this.cnpjDig = cnpjDig;
}
public void setCnpjFil(Integer cnpjFil) {
this.cnpjFil = cnpjFil;
}
public void setCnpjNum(Integer cnpjNum) {
this.cnpjNum = cnpjNum;
}
public void setCliente(Set<Cliente> cliente) {
this.cliente = cliente;
}
public void setIdEmpresa(Long idEmpresa) {
this.idEmpresa = idEmpresa;
}
public void setInscricaoEstadual(Long inscricaoEstadual) {
this.inscricaoEstadual = inscricaoEstadual;
}
public void setNome(String nome) {
this.nome = nome;
}
public void setNomeFantasia(String nomeFantasia) {
this.nomeFantasia = nomeFantasia;
}
}
Estou conseguindo salvar e carregar normalmente os 2 objetos.
Mas na situação onde :
Cliente c = new Cliente();
Empresa e = new Empresa();
c.setNome("Marcio");
e.setNome("Gif High Tech Ltda");
c.setEmpresa(e);
Session session = HibernateUtil.getSession();
Transaction t = session.beginTransaction();
session.save(c);
t.commit();
Os campos de ambos objetos no banco de dados podem ser setados como null, com exceção dos campos de nome e id …
Isto está me gerando um erro …
Eu gostaria de salvar tipo cascade, que seria salvar primeiro a empresa e depois o cliente, mas esta gerando um erro falando que o campo idempresa não pode ser null, ou seja, não esta salvando a empresa antes do cliente.
alguem sabe me dizer como resolver isso ???
[
]