Java 使用JPA Criteria API,如何执行这种类型的删除查询

Java 使用JPA Criteria API,如何执行这种类型的删除查询,java,hibernate,jpa,Java,Hibernate,Jpa,我尝试创建一个子查询,但它似乎不允许您设置ORDER BY或LIMIT值。您是正确的,JPQL(以及相应的条件)将不允许LIMIT(因为这是由setFirstResult/setMaxResults为外部查询提供的,但决不会在子查询上提供的),并且,订单依据在子查询中不可用。然后,您可以使用特定的JPA提供者(可能允许在JPQL中使用它)(DataNucleus确实允许在JPQL中使用一种形式的“限制”,以及顺序……我希望Hibernate提供其中一种),或者使用SQL。Criteria是一个固

我尝试创建一个子查询,但它似乎不允许您设置ORDER BY或LIMIT值。

您是正确的,JPQL(以及相应的条件)将不允许
LIMIT
(因为这是由
setFirstResult
/
setMaxResults
为外部查询提供的,但决不会在子查询上提供的),并且,
订单依据
在子查询中不可用。然后,您可以使用特定的JPA提供者(可能允许在JPQL中使用它)(DataNucleus确实允许在JPQL中使用一种形式的“限制”,以及顺序……我希望Hibernate提供其中一种),或者使用SQL。Criteria是一个固定的API,所以您不会让JPA提供商允许这些API
DELETE FROM table_name
  WHERE NOT IN (
    SELECT id
    FROM table_name
    WHERE user_id = 1
    ORDER BY date DESC
    LIMIT 50
  )