我有一个带有自动生成ID的新JPA实体,我坚持下去。 之后我想再次获得它,修改它并坚持更改。
新实体使用自动生成的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吗?
答案 0 :(得分:1)
您的addBook方法需要返回持久化实体。
em.persist(konyv);
konyv = em.merge(konyv);
return konyv;
返回的实体将包含生成的ID。当你拥有持久化实体时,你不需要调用getBook方法。