【问题标题】:JPA Criteria Specification for ManyToMany多对多的 JPA 标准规范
【发布时间】:2019-12-07 13:09:09
【问题描述】:

我有实体 ClientAgency 与 ManyToOne 关系,所以表 client 有列 agency_id 指向表 agency,还有 Client 有:

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

有 Spring Data JPA 规范来选择 ClientAgency id 的:

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<>();

我应该如何调整上述规范以选择具有Agency id 的Client

非常感谢您!

【问题讨论】:

  • root.join(Client_.agencies) 不适合你吗?不确定您期望修改后查询的逻辑是什么
  • 感谢您的回复,实际上这是我想到的第一件事,但我不确定这样的规范是否准确选择了机构 ID 在给定 ID 中的客户,将尝试对其进行测试。跨度>
  • @crizzis 挺好用的,你可以单独回答让我投票

标签: java jpa spring-data-jpa criteria-api


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-09-06
    • 1970-01-01
    • 2017-10-28
    • 2011-12-29
    • 1970-01-01
    • 2020-11-06
    • 2015-10-28
    • 1970-01-01
    • 2017-08-19
    相关资源
    最近更新 更多