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]->com.algonquincollege.cst8277.models.User["bankAccounts"]->org.eclipse.persistence.indirection.IndirectList[0]->com.algonquincollege.cst8277.models.InvestmentAccount["users"])
InvestmentAccount 从 AccountBase 扩展而来。
这是一个不同的错误。映射到 json 时会出现无限循环,请将 @JsonIgnore 放在 Account 中的用户之前或 User 中的 bancAccounts 之前
谢谢。我通过在两个实体中添加 @JsonIgnoreProperties 解决了这个问题。以上是关于JPQL查询多对多连接表的主要内容,如果未能解决你的问题,请参考以下文章