上下文:我有两个表 Secret_Agent
和Secret_Mission
。两者之间存在 @ManyToMany 关系,因为可以指定多个特工来执行相同的 secret 任务,并且可以指定同一个特工执行多个 secret 任务。
表 SECRET_AGENT
表 SECRET_MISSION
加入表SECRET_AGENT_MISSION
Java 代码:
class Secret_Agent {
. . .
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name ="SECRET_AGENT_MISSION", joinColumns = { @JoinColumn(name =
"SecretAgentId") }, inverseJoinColumns = {
@JoinColumn(name = "SecretMissionId") }
private List <Secret_Mission> missions;
. . .
}
class Secret_Mission {
. . .
@ManyToMany(mappedBy = "missions")
private List <Secret_Agent> agents;
. . .
}
问题:我正在尝试让所有特工和特工任务的状态 = 事件。但下面的查询只检索到具有状态为“事件”的任务的特工。
@Query(FROM FROM Secret_Agent sa "
+ "LEFT JOIN FETCH sa.missions sm"
+ "WHERE sm.status = "ACTIVE" ")
任务状态可以是存档或事件。 我只需要任务状态为“事件”的所有 secret 特工,或者只需要任务为空的 secret 特工实体。
最佳答案
可以通过使用 @Where
注释将关联映射两次来解决此问题。
@ManyToMany(mappedBy = "agents")
@Where(clause = "status = 'ACTIVE'")
private List activeMissions
@ManyToMany(mappedBy = "agents")
private List missions
完整的解释可以在这里找到 https://thoughts-on-java.org/hibernate-tips-filter-entities-mapped-association/
关于mysql - Hibernate 多对多选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55734679/