em.Persist(书)不会更新实体

时间:2013-05-25 21:33:02

标签: java jpa java-ee-6 entitymanager

我有一个带有自动生成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吗?

1 个答案:

答案 0 :(得分:1)

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

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

返回的实体将包含生成的ID。当你拥有持久化实体时,你不需要调用getBook方法。