Java 如何以最小查询数获取所有多对多关系?
如何使用最少数量的查询获取所有多对多关系? 我的意思是没有任何Java 如何以最小查询数获取所有多对多关系?,java,hibernate,jpa,spring-boot,spring-data,Java,Hibernate,Jpa,Spring Boot,Spring Data,如何使用最少数量的查询获取所有多对多关系? 我的意思是没有任何n+1查询。 3-这很正常 我有一个实体: @实体 @表(name=“tags”) 公共类标签{ @身份证 @GeneratedValue(策略=GenerationType.AUTO) @列(name=“id”) 私人长id; @列(name=“title”) 私有字符串标题; } @实体 @表(name=“stations”) 公营电台{ @身份证 @GeneratedValue(策略=GenerationType.AUTO) @
n+1查询
。
3-这很正常
我有一个实体:
@实体
@表(name=“tags”)
公共类标签{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“id”)
私人长id;
@列(name=“title”)
私有字符串标题;
}
@实体
@表(name=“stations”)
公营电台{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“id”)
私人长id;
@列(name=“title”)
私有字符串标题;
}
@实体
@表(name=“songs”)
公开课歌曲{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“id”)
私人长id;
@列(name=“title”)
私有字符串标题;
@许多
@可接合(
name=“songs\u电台”,
joinColumns={
@连接柱(
name=“song_id”,
referencedColumnName=“id”
)
},
反向连接列={
@连接柱(
name=“station\u id”,
referencedColumnName=“id”
)
}
)
私人名单站;
@许多
@可接合(
name=“songs\u标签”,
joinColumns={
@连接柱(
name=“song_id”,
referencedColumnName=“id”
)
},
反向连接列={
@连接柱(
name=“tag\u id”,
referencedColumnName=“id”
)
}
)
私有列表标签;
}
和存储库:
公共接口SongRepository扩展了Crudepository{
@查询(“从歌曲中选择s左连接提取s.tags左连接提取s.stations”)
公共列表completeFindAllSongs();
}
- 因此,我不能在
中使用即时加载,原因是completeFindAllSongs()
无法同时提取多个行李
- 无法使用
@NamedEntityGraph
- 我无法手动加载数据,因为我无法访问
表songs\u标签
- 请不要建议使用
@LazyCollection
编辑:所以对你的问题的回答是:你只需要一个查询。只需使用集合并立即获取所需内容。请记住,通过联合获取多个集合,您将在集合行之间创建完整的笛卡尔积,这可能会对数据库和应用程序端的性能产生巨大的负面影响
您可能想考虑以批方式初始化集合。
请记住,通过连接获取多个集合,您在集合行之间创建了完全笛卡尔积,这可能对数据库和应用程序都有巨大的负面性能影响。
您可能想考虑使用批处理初始化集合。
这就是为什么我希望看到3个单独查询而不是使用一个连接)<代码> @ BATCHSIZE 这是一个非常好的东西。也许jpa有这样的东西?不,目前还没有jpa的等价注释;目前,JPA将大部分延迟加载细节留给提供商处理。这就是为什么我希望看到3个单独的查询,而不是一个带有连接的查询)@BatchSize
这是一个非常好的东西。也许jpa有这样的东西?不,目前还没有jpa的等价注释;目前,JPA将大部分延迟加载细节留给提供商处理。