尝试更新外键时遇到问题。使用合并功能 我总是得到一个内存不足的错误,或者我得到一个超时entitymanager persist
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);
}
仍不worki ng
之后我删除了s.getRaums().add(r)和f.getRaums().add(r)行 ,但是这会在我需要做的下一个查询中导致LazyInitializationException。
我要的是这样的:
UPDATE Raum SET FakultaetId = ?, StandortId = ? WHERE RaumID = ?
我究竟做错了什么?有没有更好的方法来做到这一点?