1

我有一个具有自动生成 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 托管实体更新,但我试图在方法结束后使用实体的 id。到时候不应该有id吗?

4

1 回答 1

1

您的 addBook 方法需要返回持久化的实体。

em.persist(konyv); 
konyv = em.merge(konyv); 
return konyv;

返回的实体将包含生成的 id。由于您已恢复持久化实体,因此您无需调用 getBook 方法。

于 2013-05-25T21:56:33.203 回答