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 同时工作的正确安全策略值设置