课程
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;
}
}
问题
我需要 getReferencias() 方法提供的所有 Radicacion 对象最终都在 getRadicacion().getReferencias() 集合中。
每当我打电话给guardarDependencias(用英语保存依赖项)时,什么都没有发生。原始的 getRadicacion.getReferencias() 保持不变。
需要思考的事情
如果我插入 DAOBase.merge(ref); 在迭代中,它不会产生任何 sql 输出。这让我觉得 ref 已经作为持久性加载了,那么为什么当我将链接设置为 getRadicacion() 时,hibernate 无法更新其状态?
如果我插入 System.out.println(HibernateUtil.getCurrentSession().contains(ref)); 在迭代器中,它打印出 true。
如果我创建其他关联,持久性工作正常。问题可能与自引用有关。
谢谢你的帮助