JPA/Hibernate 类型安全删除查询

Posted

技术标签:

【中文标题】JPA/Hibernate 类型安全删除查询【英文标题】:JPA/Hibernate typesafe DELETE queries 【发布时间】:2011-04-06 08:49:12 【问题描述】:

我见过的唯一 CriteriaQuery 示例是针对 SELECT 查询的。有没有办法使用 JPA 2 或 Hibernate API 构建类型安全的 DELETE 查询?

【问题讨论】:

【参考方案1】:

我认为这是不可能的。

引用自http://blogs.oracle.com/ldemichiel/entry/java_persistence_2_0_public1:

Criteria API 目前不支持更新和删除操作

【讨论】:

【参考方案2】:

它将提供JPA 2.1 版本。

【讨论】:

而here是你在2.1中删除的方式【参考方案3】:

这不是直接可能的,但您可以通过 Querydsl JPA 扩展使用类型安全的 DELETE 和 UPDATE 查询。 Querydsl 在内部使用 JPQL,但为查询构造提供了类型安全的流畅接口。

我是Querydsl的维护者,所以这个答案是有偏见的。

【讨论】:

【参考方案4】:

不确定您是否可以使用 Criteria 执行此操作,但可以使用删除或更新等批量操作创建 HQL。从“Persistence with Hibernate”一书(第 535 页)中查看此示例:

Query q = session.createQuery(
   "delete CreditCard c where c.stolenOn is not null"
);
int updatedCreditCards = q.executeUpdate();

最好的问候!

【讨论】:

以上是关于JPA/Hibernate 类型安全删除查询的主要内容,如果未能解决你的问题,请参考以下文章

什么是允许 RMI 和 JPA/Hibernate 同时工作的正确安全策略值设置

Spring Security JDBC 和 Hibernate JPA

JPA/Hibernate 和复合键

redis安全删key脚本

我要删一个文件,提示说我没有权限删除,那我该怎么删除

linux脚本运行后把脚本删了会怎么办