嘗試更新外鍵時遇到問題。使用合併功能 我總是得到一個內存不足的錯誤,或者我得到一個超時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 = ?
我究竟做錯了什麼?有沒有更好的方法來做到這一點?