class Bean {
private List<Radicacion> getReferencias() {
List<Radicacion> refs = DAO.findAll(Radicacion.class);
return refs;
}
private Radicacion getRadicacion() {
Radicacion r = DAO.findById(Radicacion.class, new Integer(33));
return r;
}
private void guardarDependencias() {
Iterator<Radicacion> itRad = getReferencias().iterator();
while (itRad.hasNext()){
Radicacion ref = itRad.next();
getRadicacion().getRadicacions().add(ref);
ref.setReferencia(getRadicacion());
}
}
}
////////
class Radicacion {
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "referencia")
public List<Radicacion> getRadicacions() {
return this.radicacions;
}
public void setRadicacions(List<Radicacion> radicacions) {
this.radicacions = radicacions;
}
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "referencia_asociada")
public Radicacion getReferencia() {
return this.referencia;
}
public void setReferencia(Radicacion radicacion) {
this.referencia = referencia;
}
}
我需要這個問題
所有Radicacion由getReferencias()方法提供的對象最終在getRadicacion()。getReferencias()集合中。
每當我打電話給guardarDependencias(保存英語中的依賴關係)時,什麼都不會發生。原始的getRadicacion.getReferencias()保持不變。
事情思考
如果我插入DAOBase.merge(REF);在迭代中,它不會產生任何sql輸出。它使我認爲ref已經被加載爲持久的,所以當我設置鏈接到getRadicacion()時,爲什麼hibernate無法更新它的狀態?如果我插入System.out.println(HibernateUtil.getCurrentSession()。contains(ref));如果我插入System.out.println(HibernateUtil.getCurrentSession()。contains(ref));在迭代器中,它輸出true。
如果我創建其他asociations,持久性工作正常。這個問題可能與自我引用有關。
感謝您的幫助
hi shailendra,你說得對,Radicacion是一個自引用類。至於事務代碼,它是一個過濾器,它爲每個請求開始一個新的事務,並在請求即將結束時進行提交。 –
請參閱http://stackoverflow.com/questions/3393515/jpa-how-to-have-one-to-many-relation-of-the-same-entity-type和http://stackoverflow.com/questions/ 5329015/hibernate-annotations-self-referencing-class正確使用自引用關係 – Shailendra