java - em.Persist(book) 不会更新实体

标签 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了吗?

最佳答案

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

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

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

关于java - em.Persist(book) 不会更新实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16754107/

相关文章:

java - 如何在Android中创建这种 View ?

java - JBOSS 5_1_0 GA 是否支持在 WAR 中打包 EJB?

java - 规则引擎是实现欺诈规则的正确选择吗?

java - 将延迟初始化对象设置为 null,而对象在 jpa 中使用 hibernate 代理

javascript - [AngularJS][JavaEE] 如何使用 $http.post() 发送多个数据

java - 替换基本 fragment 及其布局时 fragment 重叠

java - 使用另一个线程终止一个线程(循环)

java - 如何在 Java 中从 Thumbs.db 中提取图像?

java - 如何在外部实体上生成 query-dsl Q 类?

java - Hibernate 一对多约束违反异常