Java 使用JpaRepository查询多次连接获取同一表

Java 使用JpaRepository查询多次连接获取同一表,java,spring-boot,hibernate,jpql,Java,Spring Boot,Hibernate,Jpql,我制作了一个用spring boot构建的web api,但在解决n+1选择问题时遇到了一些问题 只是想给你一点背景知识。我在postgres中构建了一个数据库,这样我就有了公共模式和一个名为symbol的模式。符号模式包含所有符号的寄存器表和每个字段一个表(例如:符号可以有货币)。公共模式上的其他表是作为默认的关系数据库项目创建的,但是所有的register(例如:Instrument和Model)表也有一个symbol_id。这就像symbol_id(和symbol)是某种全局标识符一样。在

我制作了一个用spring boot构建的web api,但在解决n+1选择问题时遇到了一些问题

只是想给你一点背景知识。我在postgres中构建了一个数据库,这样我就有了公共模式和一个名为symbol的模式。符号模式包含所有符号的寄存器表和每个字段一个表(例如:符号可以有货币)。公共模式上的其他表是作为默认的关系数据库项目创建的,但是所有的register(例如:Instrument和Model)表也有一个symbol_id。这就像symbol_id(和symbol)是某种全局标识符一样。在本例中,我在Springboot项目中映射了实体,如下所示:

@实体
@表(…)
类符号{
//符号的其他字段
//我在这里添加了这个字段,以便更容易获得符号的货币值。
@OneTONE(mappedBy=“symbol”,cascade=CascadeType.ALL)
私人货币;
}
@实体
@表(…)
类别符号货币{
//符号货币相关对象的其他字段
@奥内托内
@JoinColumn(name=“symbol\u id”)
私人符号;
}
@实体
@表(…)
类乐器{
//其他仪器领域
@许多酮
@JoinColumns(name=“symbol\u id”)
私人符号;
}
@实体
@表(…)
类模型{
//其他模型字段
@奥内托内
@JoinColumn(name=“psymbol_id”)
私人符号;
}
@实体
@表(…)
每日上课{
//其他模型位置每日字段
@许多酮
@JoinColumn(name=“model\u id”)
私有模型;
@许多酮
@JoinColumn(name=“仪器id”)
私人文书;
}
我想创建一个端点,这样用户就可以通过模型符号每天选择所有模型位置。这是我的存储库的代码和我为此创建的查询:


接口模型PositionDailyRepository实现了JpaRepository{
@查询(“从ModelPositionDaily mpd JOIN FETCH mpd.instrument instrument JOIN FETCH mpd.model model JOIN FETCH instrument.symbol JOIN FETCH model.symbol其中mpd.model.symbol.cod=:symbol选择mpd”
公共列表findModelPositionDailyByModelSymbol(@Param(“symbol”)字符串符号);
}
但是现在发生的是,关于Symbol类上的字段currency,我遇到了n+1问题。也就是说,当我为SymbolCurrency调用此函数时,我的代码正在进行多次选择。我不知道如何解决这个问题,因为我无法使用“join-fetch-Symbol.currency-SymbolCurrency”为currency创建获取连接,因为我有多个与Symbol的连接。我不确定我做得是否正确,或者我是否遗漏了什么

你的帮助将受到感谢


关于

使用不同的别名命名,如
连接取数工具.symbol s1连接取数模型.symbol s2其中s2.cod=:symbol