Session session = new HibernateFactory().getSession();
Transaction tx = session.beginTransaction();
Empresa empresa = new Empresa();
LocalEmpresa localEmpresa = new LocalEmpresa();
empresa.setCnpj("1");
localEmpresa.setCnpj(empresa);
localEmpresa.setCountry_code("BR");
session.save(empresa);
session.save(localEmpresa);
tx.commit();
Re:Exception Hibernate 1:n
8 Respostas
Entaw coloca suas classes aih, p/ ver qual eh o problema, pois estou comecando a mexer com hibernate.
Pela exception, br.com.serasa.bean.Empresa.cnpj não tem um getter.
Pessoal, RESOLVI a questão:
Faltava citar no hibernate.cfg o mapeamento de Setor.
Me perdoem por este post!
Atenciosamente,
Pessoal,Estou com o mesmo problema, mas não estou conseguindo resolver!
Classe EmpresaClasse Setor@Entity @Table(name = "empresa") public class Empresa implements java.io.Serializable { @Id @SequenceGenerator(name = "ID_Empresa") @Column(name = "ID_Empresa") private int id; @Column(name = "Nome") private String nome; @OneToMany(mappedBy = "empresa", cascade = CascadeType.ALL, fetch = FetchType.EAGER) private Collection<Setor> setores;Erro:@Entity @Table(name = "setor") public class Setor implements java.io.Serializable { @Id @SequenceGenerator(name = "ID_Setor") @Column(name = "ID_Setor") private int id; @Column(name = "Nome") private String nome; @ManyToOne @JoinColumn(name = "ID_Empresa", nullable = false, updatable = true) private Empresa empresa;Exception in thread "main" java.lang.ExceptionInInitializerError at br.com.quality.util.HibernateUtil.<clinit>(HibernateUtil.java:32) at br.com.quality.dominio.teste.HibernateTeste.main(HibernateTeste.java:33) Caused by: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: br.com.quality.dominio.Empresa.setores[br.com.quality.dominio.Setor] at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:979) at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:530) at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:471) at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:43) at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1130) at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:296) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1286) at br.com.quality.util.HibernateUtil.<clinit>(HibernateUtil.java:26) ... 1 moreO que está de diferente?
tem necessidade de vc mapear de novo o objeto empresa dentro da classe setor?
mapeie somente em um
Session session = new HibernateFactory().getSession();
Transaction tx = session.beginTransaction();
Empresa empresa = new Empresa();
empresa.setCnpj("1");
session.save(empresa);
LocalEmpresa localEmpresa = new LocalEmpresa();
localEmpresa.setCnpj(empresa.getCnpj());
localEmpresa.setCountry_code("BR");
session.save(localEmpresa);
tx.commit();
Exception in thread "main" org.hibernate.PropertyAccessException: could not get a field value by reflection getter of br.com.serasa.bean.Empresa.cnpj
Aparentemente ele nao salva empresa para depois validar a chave estrangeira em localidade!
Alguém já recebeu esse exception?!
Value!
Oi Eduardo!
Vc está usando relacionamento 1:n?!
Tenho a impressão que estou usando errado o @ManyToOne e @OneToMany!!!
Valeu!
@Entity
public class Empresa {
@Id
private String cnpj;
@OneToMany (mappedBy = "cnpj")
private List<LocalEmpresa> lista = new ArrayList<LocalEmpresa>();
public String getCnpj() {
return cnpj;
}
public void setCnpj(String cnpj) {
this.cnpj = cnpj;
}
public List<LocalEmpresa> getLista() {
return lista;
}
public void setLista(List<LocalEmpresa> lista) {
this.lista = lista;
}
}
@Entity
public class LocalEmpresa {
@Id @GeneratedValue
private Long idLocalEmpresa;
@ManyToOne (targetEntity=Empresa.class)
@JoinColumn(name="cnpj")
private String cnpj;
//outros campos e getters and setters
Caramba! Funcionou!
Tive que mudar o seguinte:
Na classe Empresa:
@OneToMany (cascade = {CascadeType.ALL},
mappedBy = "empresa")
Na classe Local:
@ManyToOne (targetEntity=br.com.serasa.bean.Empresa.class)
@JoinColumn(name="cnpj", nullable=false)
private Empresa empresa;
Fica ae registrado! Valeu!