我正在解决这个问题,我需要一些帮助。我正在尝试编辑查询,但我一直收到此错误
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;
}
有什么想法吗?
答案 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