Olá a todos!
Estava lendo o fórum do Hibernate, por acaso encontrei uma pessoa que está passando pelo mesmo problema. A Fk, quando gravado o registro no banco, está sempre vindo null. Na tabela Personen o demônio da FK FIRMA_FK vem sempre nulo.
Será que alguém tem noção do que se trata?
@Entity
@Table (name="firmen")
public class Firma implements Serializable {
private static final long serialVersionUID = -6665434043077843943L;
private int firmaId;
private String name;
private List<Person> personen = new ArrayList<Person>();
@Id @GeneratedValue(strategy = GenerationType.AUTO)
@Column (name="FIRMA_ID")
public int getFirmaId() {
return firmaId;
}
public void setFirmaId(int firmaId) {
this.firmaId = firmaId;
}
@Column (name="NAME", length=30)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany (targetEntity=Person.class, mappedBy="firma", cascade=CascadeType.ALL)
public List<Person> getPersonen() {
return personen;
}
public void setPersonen(List<Person> personen) {
this.personen = personen;
}
}
@Entity
@Table (name="personen")
public class Person implements Serializable{
private static final long serialVersionUID = 2135362023133590877L;
private int personId;
private String name;
private Firma firma;
public static long getSerialVersionUID() {
return serialVersionUID;
}
@Id @GeneratedValue(strategy = GenerationType.AUTO)
public int getPersonId() {
return personId;
}
public void setPersonId(int personId) {
this.personId = personId;
}
@Column (name="NAME", length=20)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToOne (cascade=CascadeType.ALL)
@JoinColumn (name="FIRMA_FK", referencedColumnName = "FIRMA_ID", insertable=false, updatable=false)
public Firma getFirma() {
return firma;
}
public void setFirma(Firma firma) {
this.firma = firma;
}
}
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
AnnotationConfiguration cfg = new AnnotationConfiguration();
cfg.addAnnotatedClass(Firma.class);
cfg.addAnnotatedClass(Person.class);
sessionFactory = cfg.buildSessionFactory();
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}
public static Session getSession()
throws HibernateException {
return sessionFactory.openSession();
}
}
public class CriarTabelas {
public static void criar(AnnotationConfiguration cfg){
new SchemaExport(cfg).create(false,true);
}
public static void main(String args[]) {
AnnotationConfiguration cfg = new AnnotationConfiguration();
cfg.addAnnotatedClass(Firma.class);
cfg.addAnnotatedClass(Person.class);
criar(cfg);
}
}
public class Insert {
public static void main(String[] args) {
Session session = HibernateUtil.getSession();
Firma firma = new Firma();
firma.setName("Empresa X");
List<Person> personen = new ArrayList<Person>();
Person p1 = new Person();
p1.setFirma(firma);
p1.setName("CCalazans");
personen.add(p1);
Person p2 = new Person();
p2.setFirma(firma);
p2.setName("ACalazans");
personen.add(p2);
firma.setPersonen(personen);
session.save(firma);
session.flush();
session.close();
}
}
Valeu!