【发布时间】:2010-08-04 09:15:52
【问题描述】:
我在尝试更新外键时遇到问题。 使用合并功能时,我总是会遇到内存不足错误,或者我会超时
Fakultaet 和 Standort 是 Raum 表中的外键(多对一,延迟获取) Raum 确实渴望为 Fakultaet 和 Standort 取货
@Stateless
@Local (IRaumHomeLocal.class)
@Remote (IRaumHomeRemote.class)
public class RaumHome implements IRaumHome {
@PersistenceContext private EntityManager em;
void merge(Raum r, Integer fid, Integer sid) {
Fakultaet f = em.find(Fakultaet.class, fid);
Standort s = em.find(Standort.class, sid);
r.setFakultaet(f);
r.setStandort(s);
f.getRaums().add(r);
s.getRaums().add(r);
em.merge(r);
}
....
}
然后我尝试使用 getReference() 而不是 find() 因为我只想进行更新, 所以我有方法:
void merge(Raum r, Integer fid, Integer sid) {
Standort s = em.getReference(Standort.class, sid);
Fakultaet f = em.getReference(Fakultaet.class, fid);
s.getRaums().add(r); // now it lags here
f.getRaums().add(r);
em.merge(r);
}
还是不行
之后我删除了 s.getRaums().add(r) 和 f.getRaums().add(r) 行
但这会在我需要执行的下一个查询中导致 LazyInitializationException。
我想要的是这样的:
UPDATE Raum SET FakultaetId = ?, StandortId = ? WHERE RaumID = ?
我做错了什么?有更好的方法吗?
【问题讨论】: