Java 如何通过JPQL仅更新表中的一行,但id号最大

Java 如何通过JPQL仅更新表中的一行,但id号最大,java,sql,hibernate,jpa,Java,Sql,Hibernate,Jpa,我运行以下代码打算在Hibernate 3.6.7 final JPA 2.0?上更新表中最少的记录: Query query = em.createQuery("UPDATE MyTable a SET a.isEnable=1 WHERE a.isEnable=0 ORDER BY a.id DESC").setMaxResults(1); query.executeUpdate(); 但是hibernate在生成sql时会忽略顺序 ORDER BY for SELECT是否仅在JPQL中

我运行以下代码打算在Hibernate 3.6.7 final JPA 2.0?上更新表中最少的记录:

Query query = em.createQuery("UPDATE MyTable a SET a.isEnable=1 WHERE a.isEnable=0 ORDER BY a.id DESC").setMaxResults(1);
query.executeUpdate();
但是hibernate在生成sql时会忽略顺序

ORDER BY for SELECT是否仅在JPQL中使用?如何在JPA中使用ORDER BY执行更新查询


感谢您的帮助。

要使用表中的最后一个ID更新记录,请执行以下操作:

TypedQuery<MyEntity> query = em.createQuery("SELECT a FROM MyEntity a WHERE a.isEnable=0 ORDER BY a.id DESC", MyEntity.class);
query.setMaxResults(1);

List<MyEntity> resultList = query.getResultList();
if (resultList.size()>0) {
    resultList.get(0).setEnabled(true);
    //eventually you can to em.flush();
}

为什么需要按特殊顺序更新条目?那应该没有用…绝对没有。应该将更新视为原子更新,这样,当更新进行时,数据库的状态—一些行已更新,一些行尚未更新—将永远不会对您可见。您将只看到最终结果,并且不可能对它们的更新顺序感兴趣。更新。。。按部就班是没有意义的。而且它不是有效的SQL。仔细考虑更新的作用。您有一个WHERE子句,它匹配表中某些行的子集。您可以在单个原子操作中更改这些行中某些字段的值。你会怎么做?没有什么合理的含义。我只想用最大的id号更新表中的一行。我从中了解到这句话,它在我的MySQL客户机上运行。@okwap为什么你不确切地问这个问题?因为您试图做的事情毫无意义……它会起作用,除非我最好添加query.setLockModelLockModeType.悲观_WRITE before query.getResultList以防止竞争条件问题。此外,运行两个查询而不是一个更新操作并不理想。