JPQL查询多对多连接表

Posted

技术标签:

【中文标题】JPQL查询多对多连接表【英文标题】:JPQL query for many-to-many join table 【发布时间】:2020-03-26 01:33:14 【问题描述】:

我有 2 个实体 User 和 AccountBase 具有多对多关系。 我需要从连接表中选择具有选定用户 ID 的所有 AccountBase 对象。 我尝试了一些连接查询,但都不起作用。

    @Table(name = "ACCOUNT")
    @DiscriminatorColumn(name = "ACCOUNT_TYPE", length = 1)
    public abstract class AccountBase extends ModelBase 

        protected double balance;
        protected List<User> users = new ArrayList<>();
@Table(name = "USER_ACCOUNT")
public class User extends ModelBase implements Serializable 
    private static final long serialVersionUID = 1L;

    protected String name;
    protected List<AccountBase> bankAccounts = new ArrayList<>();

// bi-directional many-to-many association to AccountBase
    @ManyToMany
    @JoinTable(name = "USER_ACCOUNT_ACCOUNT", joinColumns =  @JoinColumn(name = "USER_ID") , inverseJoinColumns = 
            @JoinColumn(name = "ACCOUNT_ID") )
    public List<AccountBase> getBankAccounts() 
        return this.bankAccounts;
    

【问题讨论】:

【参考方案1】:

从帐户库中加入用户实体

select account from AccountBase account join account.users user where user.id=? 

【讨论】:

我以前试过这个,但没用,这就是我得到的。 org.glassfish.jersey.server.internal.process.MappableException: com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (***Error) (through reference chain: org.eclipse.persistence.indirection.IndirectList[0]-&gt;com.algonquincollege.cst8277.models.User["bankAccounts"]-&gt;org.eclipse.persistence.indirection.IndirectList[0]-&gt;com.algonquincollege.cst8277.models.InvestmentAccount["users"]) InvestmentAccount 从 AccountBase 扩展而来。 这是一个不同的错误。映射到 json 时会出现无限循环,请将 @JsonIgnore 放在 Account 中的用户之前或 User 中的 bancAccounts 之前 谢谢。我通过在两个实体中添加 @JsonIgnoreProperties 解决了这个问题。

以上是关于JPQL查询多对多连接表的主要内容,如果未能解决你的问题,请参考以下文章

JPQL在多对多关系上左外连接

Django:表多对多查询聚合分组FQ查询事务

多对多查询 jpql

具有多对多关系的 JPQL 查询

返回涉及多对多关系的实体的 JPQL 查询

JPQL 多对多 Dto 选择失败