【问题标题】:Appengine JPA updateAppengine JPA 更新
【发布时间】:2012-11-02 14:13:19
【问题描述】:

您好,我正在为 Datanucleus 使用 Google App Engine SDK 1.7.3 和 JPA。 我无法更新变量 t 中的对象。

我已按照this question 接受的答案中的说明编写代码。

如果我使用代码:

    PersistenceManager persistenceManager=JDOHelper.getPersistenceManager(t);
    persistenceManager.refresh(t);
    return t;

我明白了:

java.lang.UnsupportedOperationException: Method not supported with JPA
    at org.datanucleus.api.jpa.JPAPersistenceManager.refresh(JPAPersistenceManager.java:693)
    at com.appspot.diasporajava.dao.GenericDaoImpl.update(GenericDaoImpl.java:74)

如果我使用代码:

return this.emf.createEntityManager().merge(t);

其中 emf 是 EntityManagerFactory。

我明白了:

javax.persistence.PersistenceException: Object with id "com.appspot.diasporajava.entities.Post@447cc9c9" is managed by a different Object Manager
    at org.datanucleus.api.jpa.NucleusJPAHelper.getJPAExceptionForNucleusException(NucleusJPAHelper.java:302)
    at org.datanucleus.api.jpa.JPAEntityManager.merge(JPAEntityManager.java:576)
    at com.appspot.diasporajava.dao.GenericDaoImpl.update(GenericDaoImpl.java:76)

我必须一直打开我的持久性管理器吗?

A related ticket.

我用来创建对象的 ocde 如下:

@Override
@Transactional
public T create(final T t) {    
    EntityManager em = this.emf.createEntityManager();
    em.persist(t);
    em.close();
    return t;
}

【问题讨论】:

    标签: java google-app-engine jpa-2.0 datanucleus


    【解决方案1】:

    问题是我第一次拿到对象t时没有关闭EntityManager

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      • 2013-10-25
      • 2016-09-04
      • 2013-01-15
      • 1970-01-01
      相关资源
      最近更新 更多