1
我有一個新的JPA實體與自動生成的ID,我堅持它。 之後,我想再次獲取它,修改它並堅持更改。em.Persist(書)不會更新實體
新實體通過自動生成的ID保存到數據庫中,但實體的bookid
保留爲空。 這樣我就不能使用getBook(id)函數再次找到它。
@Stateless
public class BookManager implements BookManagerRemote {
@PersistenceContext
EntityManager em;
@EJB
Authenticator auth;
public BookManager() {
}
@Override
public void addBook(String user, Konyv konyv) throws InsufficentPrivilegesException {
if (auth.isAdmin(user)) {
em.persist(konyv);
} else {
throw new InsufficentPrivilegesException();
}
}
@Override
public Konyv getBook(String user, Integer bookid) throws InsufficentPrivilegesException {
if (auth.isAdmin(user)) {
return em.find(Konyv.class, bookid);
} else {
throw new InsufficentPrivilegesException();
}
}
}
-
Book mistypedBook = new Book("Stanislaw Lem", "Kibeliada");
bookmanager.addBook(name, mistypedBook);
Book whopsBook = bookmanager.getBook(name, mistypedBook.getBookid()/*<-ID IS NULL*/);
我如何可以同步與數據庫中的新實體持續? 我見過JPA Container managed entity update after persist的問題,但我試圖在方法結束後使用實體的id。它不應該有那個ID?
我目前正在爲函數編寫測試,所以我必須調用getBook方法:) 我會試試! – Croo
它的工作! 它甚至沒有konyv = em.merge(konyv);這讓我驚歎不已。我真的不明白這一點。 我讀了堅持和合並都把實體置於「託管」狀態,但我不明白怎麼可能,該同一對象的另一個參考不起作用,但返回它確實......:S – Croo
@Croo The persist方法更新傳遞給它的實體的狀態,但它不會更改其引用。當你返回它時,更新的狀態會被傳回。 – JamesB