Update OneToMany Liste nach Entität speichern im Ruhemodus

habe ich Beziehung:

//In A.java class
@OneToMany(mappedBy="a", fetch=FetchType.LAZY)
@Cascade(CascadeType.SAVE_UPDATE)
private List<B> bList;

//In B.java class
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="id_a")
@Cascade(CascadeType.SAVE_UPDATE)
private A a;

Nun suchen diese:

A a=new A();
//setting A

B b=new B();
//setting B
b.setA(a);

session.save(b); //this save b and a obviously

Nun das "problem":

  • ein.getId() -> aktuelle new id OK
  • ein.getBList() -> immer noch null...

So, warum bList ist nicht aktualisieren Sie in diesem Fall?

Habe ich versucht neu zu laden nach dem speichern, auf diese Weise:

A a=new A();
//setting A

B b=new B();
//setting B
b.setA(a);

session.save(b);

A loadedA=(A)session.get(A, a.getId());

Aber loadedA noch ein NULL-bList wie ein.

Natürlich zu vermeiden dieses problem, das ich in deinen Weg:

A a=new A();
//setting A

B b=new B();
//setting B

List<B> bList=new ArrayList<B>();
bList.add(b);
a.setBList(bList);

session.save(a); //this save a and b

In dieser Weise alle arbeiten gut, aber meine Frage ist:
Warum Id ist korrekt aktualisieren nach dem speichern-Vorgang und bList nicht?
Ich habe für db-Abfrage mit einer select-Anweisung, um neu zu laden, Eine Instanz richtig?


UPDATE

Habe ich diese Ausnahme

StaleStateException: Batch update
zurückgegeben unerwartete Zeilenanzahl von
update

wenn ich versuche, saveOrUpdate Person nach dem löschen von b aus.

//first delete old b record
Session session=HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
a.getBList().remove(b);
b.setA(null);
session.delete(b);
//session.clear(); //this would solve my problem, but is it correct??
session.getTransaction().commit();

//then insert new b record
Session session=HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
B b=new B();
a.getBList().add(b);
b.setA(a);
session.saveOrUpdate(a);   
session.getTransaction().commit(); //this throw exception

diese operation zwei sind nicht in der gleichen Methode, die natürlich auch ausgelöst werden durch gui-event.

Sitzung.klar ist die wirkliche Lösung?
Im tun (wahrscheinlich) falsch?

update

entfernen session.löschen(b), das problem ist wieder gelöst... also, was ist die corretc Weg?
Ich weiß .. ich bin Total noob mit hibernate..

InformationsquelleAutor blow | 2010-06-19
Schreibe einen Kommentar