上下文:
我有一个实体Alert
,其中包含多个Dangers
,并且Danger
可以链接到多个Alerts
(标准的多对多)
@Entity
@Table(name = "alert")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Alert implements Serializable {
@ManyToMany
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@JoinTable(name = "alert_danger",
joinColumns = @JoinColumn(name = "alert_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "danger_id", referencedColumnName = "id"))
private Set<Danger> dangers = new HashSet<>();
}
我正在使用JPA规范来请求Alert
。我正在尝试findAll
包含Danger
列表的警报:
return alertRepositoryExtended.findAll(
Specification
.where(inStatusList(alertStatuses))
.and(inDangers(dangersId)));
这是inDangers
方法
private static Specification<Alert> inDangers(List<Long> dangers) {
if (dangers == null || dangers.isEmpty()) {
return null;
} else {
return (root, query, cb) -> {
Join<Alert, Danger> dangerJoin = root.join("dangers");
return dangerJoin.get("id").in(dangers);
};
}
}
我的问题:当我过滤一个危险(比如说angerA)时,我得到了所有包含危险A的警报(这很好),但是它们不再包含其他危险。 如果AlertA包含危险A和危险B,则会从过滤危险A的请求中返回她,但不再将其链接到危险B。
我尝试过的事情: 我尝试使用特定的联接(不支持内部联接,右联接)