使用 JPQL 从实体的元素集合中删除

Posted

技术标签:

【中文标题】使用 JPQL 从实体的元素集合中删除【英文标题】:Delete from entities' ElementCollections with JPQL 【发布时间】:2012-06-23 21:35:02 【问题描述】:

我的实体User 有一个基本集合:

@ElementCollection
private Set<String> completedQuests = Sets.newHashSet();

如何从该集合中删除一些值为所有/多个用户?这个伪查询的正确 JPQL 是什么?

DELETE FROM User.completeQuests
WHERE value IN (:collectionOfValues)

(仅 Hibernate 的替代方案,虽然不是首选,但也是受欢迎的。)

【问题讨论】:

【参考方案1】:

如果所有其他方法都失败,则使用原生 SQL。

em
    .createNativeQuery(
        "DELETE FROM user_completedquests " +
        "WHERE completedquests IN (:daily)"
    )
    .setParameter("daily", dailyQuests)
    .executeUpdate();

(还没有测试过)

【讨论】:

感谢作弊...不是 JPQL :)

以上是关于使用 JPQL 从实体的元素集合中删除的主要内容,如果未能解决你的问题,请参考以下文章

JPQL:如何使用 where 子句实现与集合成员声明相同的功能?

如何过滤 JPA/JPQL 中的集合?

输入参数集合包含 null 的 JPQL 查询

JPQL JOIN FETCH 多个表也带有空集合

EF 代码优先:如何在遵循 DDD 时从实体的集合中删除一行?

JPQL:在构造函数表达式中接收集合