使用EntityManager添加到数据存储区会引发异常

时间:2014-01-28 15:20:18

标签: java google-app-engine google-cloud-datastore

我正在使用以下代码将实体添加到数据存储区。但是,我得到了一个我无法解决的例外情况。任何见解?

EntityManager em = EMFService.get().createEntityManager();
MyEntity temp = new MyEntity (param1, numOptions, option1, option2, option3);
em.persist(temp);
em.close(); 

我在上面代码中的em.close()行收到以下异常:

javax.persistence.PersistenceException: Cannot make object transient since object is new and not yet committed
    at org.datanucleus.api.jpa.NucleusJPAHelper.getJPAExceptionForNucleusException(NucleusJPAHelper.java:302)
    at org.datanucleus.api.jpa.JPAEntityManager.close(JPAEntityManager.java:197)
    at com.vikrams.examquestweb.dao.Dao.addQuestion(Dao.java:34)

在Google中搜索异常描述“Cannot make object transient since object is new and not yet committed”并不会产生匹配结果,这很奇怪。我是第一个得到这个的人。也许我在某个地方犯了一些非常愚蠢的错误。请帮忙。

1 个答案:

答案 0 :(得分:1)

首先,您还需要打开一个事务来保存任何实体。 执行此操作的基本代码如下:

em.getTransaction().begin();    
em.persist(temp);
em.close(); 
em.getTransaction().commit();
em.close();

然后你还应该发布你的实体看起来如何以及它是如何映射的。