首页 > 解决方案 > 多对多的 JPA 标准规范

问题描述

我有实体ClientAgencyManyToOne 关系,所以该表clientagency_id指向 table的列agency,也Client有:

@ManyToOne
@JoinColumn(name = "agency_id")
private Agency agency;

有 Spring Data JPA 规范来选择Client带有Agencyid 的:

public static Specification<Client> withAgencyIds(Collection<Long> agencyIds) {
    return (root, query, cb) -> root.join(Client_.agency).get(Agency_.id).in(agencyIds);
}

现在我必须将 ManyToOne 关系更改为 ManyToMany 关系,这样Client就有:

@ManyToMany
@JoinTable(name = "client_agency",
           joinColumns = @JoinColumn(name = "client_id"),
           inverseJoinColumns = @JoinColumn(name = "agency_id"))
@OrderBy("name")
private List<Agency> agencies = new ArrayList<>();

我应该如何调整上面的规范以选择Client具有Agencyid 的?

非常感谢您!

标签: javajpaspring-data-jpacriteria-api

解决方案


这个 JPA 标准规范工作正常:

public static Specification<Client> withAgencyIds(Collection<Long> agencyIds) {
    return (root, query, cb) -> root.join(Client_.agencies).get(Agency_.id).in(agencyIds);
}

推荐阅读