GAE JPA尝试从查询中编辑entites时的非法参数

时间:2014-01-23 16:55:17

标签: google-app-engine jpa

我正在解决这个问题,我需要一些帮助。我正在尝试编辑查询,但我一直收到此错误

 javax.persistence.PersistenceException: Illegal argument
 ...
 Caused by: java.lang.IllegalArgumentException: operating on too many entity groups in a single transaction.
 ...

这是我用来更新记录的代码的一部分

final EntityManager em = PersistenceManager.getInstance().getEntityManagerFactory().createEntityManager();

try {
    //em.getTransaction().begin();

    {
        Query q = em.createQuery(String.format("SELECT FROM %s cat", NewsContent.class.getSimpleName()));

        int count = 0;
        for(NewsContent nc : (List<NewsContent>) q.getResultList()){
            nc.setOrderTimestamp(nc.getTimestamp());

            count++;
        }

        resp.setContentType("text/plain");
        resp.getWriter().println("NewsContent:\n\t Updated " + count + " records\n" );

    }               

    //em.getTransaction().commit()
} finally {
    //if(em.getTransaction().isActive())
    //  em.getTransaction().rollback();
    em.close();
}

这是persistance.xml的一部分

    <provider>org.datanucleus.api.jpa.PersistenceProviderImpl</provider>
    <properties>
        <property name="datanucleus.NontransactionalRead" value="true"/>
        <property name="datanucleus.NontransactionalWrite" value="true"/>
        <property name="datanucleus.ConnectionURL" value="appengine"/>
        <property name="datanucleus.appengine.datastoreEnableXGTransactions" value="true"/>

        <property name="datanucleus.singletonEMFForName" value="true"/>

    </properties>

这是JPA Entity(我删除了setter和getter)

@Entity
public class NewsContent {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Key ID;

String api_key;

String author_username;
String author_displayname;

String organization;
String organization_displayname;

long timestamp;

String api_type;

long order_timestamp;

Text text = null;

String title = null;
String title2 = null;

String extra = null;
String extra_desc = null;

Boolean featured = false;

String category = null;

String imageID = null;
String image_serving_url = null;

}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您的JPQL不正确。

SELECT FROM %s cat

应该是

Select cat from %s cat

jpql的一种常见格式,它从表中选取所有列。

select o from TableName o where o.id=1

如果您想选择一个列,那么它将是

select o.colName from TableName o where o.id=1