链接表上的JPA多个筛选器

链接表上的JPA多个筛选器,jpa,jpa-2.0,Jpa,Jpa 2.0,我们与Entity1和Entity2有多对多的关系 现在,当我们删除Entity2的一个元素时,实际上我们并没有将其从数据库中删除,只是将一个字段“isActive”设置为false 但是,当发生这种情况时,我们希望删除Entity1的任何元素与Entity2的元素之间的所有关系,该元素已被“删除” 在SQL中,这将转换为entity1表、entity2表和entity1TOentity2表。在SQL中,我们只需执行一次更新 delete from entity1TOentity2 where

我们与Entity1和Entity2有多对多的关系

现在,当我们删除Entity2的一个元素时,实际上我们并没有将其从数据库中删除,只是将一个字段“isActive”设置为false

但是,当发生这种情况时,我们希望删除Entity1的任何元素与Entity2的元素之间的所有关系,该元素已被“删除”

在SQL中,这将转换为entity1表、entity2表和entity1TOentity2表。在SQL中,我们只需执行一次更新

delete from entity1TOentity2 where entity2ID = :entity2Id
在JPA中,我们可以将Entity1的所有元素作为对象加载,并在关系上进行连接获取,然后在Java中逐个删除连接,但这非常浪费

有没有办法用JPAQL来表达SQL查询

我知道这是可能的,然后我想我可以在链接实体上运行一个与SQL查询基本相同的查询,但这似乎有点过分了


我是否错过了一个与原始SQL一样好的解决方案,但使用JPA API/JPAQL?

根据您的上下文,我只看到一个选项:本机查询。

对于纯JPA,我不知道一种干净的方法。
如果您在幕后使用
Hibernate
,有一个高级解决方案:

@Entity
@Where(clause='isActive=true')
public class Entity2{
}

您如何称呼多对多实体的所有者?这里有实体1和实体2。我没有明确定义实体Entity1toEntity2,如果这是您的意思的话?关系的所有者是具有
@ManyToMany
注释的实体,没有
mappedBy
元素。是的,这就是我的意思(即你不需要实体1实体2实体)。我有实体1。数据库中有很多元素,很多记录。我提到了获取所有连接并逐个删除连接的可能性。但你说这不是你的建议。存在实体,但我需要处理元素和记录。所以我不明白。哦,在Entity2中,您与Entity1之外的其他实体有许多其他关系,您不想加载,也不想触摸(自由)?事实上,Entity2与Entity1之外的其他实体有关系,但我不确定它是否相关。是的,我可以看到SQL查询,它是免费的。所以我想知道JPAQL是否可以实现类似的功能,从Entity1加载所有元素似乎是一种浪费。我认为,如我所说,使用显式链接表是可以实现的,但这似乎有些过分。最后,根据我目前的选项,我将加载所有Entity1元素或运行原始SQL,这两个选项都不是很吸引人。谢谢,这很有趣。我们在JPA下使用hibernate,但尽量不依赖它,所以我们可能不会利用它。我不确定,但它甚至可能只在关系的上下文中使用,这将是非常好的,类似这样的东西:虽然这是一个单间,不是很多。它可以像你想要的那样使用。我甚至在编辑它之前把它包括在我的答案中。但我认为,如果设置isActive=false,则不希望该实体获取其任何关系,因此最好将其放在该实体的顶部。