当前位置: 首页 > 知识库问答 >
问题:

hibernate中的多个联接回迁

夏意蕴
2023-03-14

我的数据库中有几个表:

games表:有team1、team2等列。这两列都引用了另一个表Team表:与players表具有一对多关系。

玩家表:与技能表有一对一的参考。

作为团队实体中的实体,我收集了FetchType设置为LAZY的玩家。

我正在进行选择查询以获得许多游戏。无论设置为获取类型(懒惰或渴望),都需要相当长的时间才能获取游戏的所有实体,因为它会加载两个团队,并且从DB日志中可以看到,对于所有团队,它会逐个加载多个玩家。最后,它会为每个玩家加载技能。

我想把它作为一个查询(而不是像现在这样逐个查询)。但要做到这一点,我需要在JPQL中正确地进行连接获取查询。

我不知道怎么做。

纯sql中的模拟查询如下所示:

select ... from games 
inner join  teams as t1 on team_id1 = t1.id 
inner join players as ps1 on ps1.team_id = team_id1
inner join skills as sk1 on sk1.players_id = ps1.id
inner join  teams as t2 on team_id2 = t2.id 
inner join players as ps2 on ps2.team_id = team_id2
inner join skills as sk2 on sk2.players_id = ps2.id
where ...

我可以在JQPL中进行几个内部连接,但不知道如何告诉hibernate加载每个集合的对象技能。

共有1个答案

卞琨
2023-03-14

这样的东西应该有用

select g from Game g 
    join fetch g.teams t
    join fetch t.players p
    join fetch p.skills s
where ...
 类似资料:
  • 问题内容: 可以使用Hibernate标准吗? 问题答案: 我遇到了完全相同的问题,并能够像这样解决它: 注:,和在上面的代码指在属性名,和类,相应地(类具有属性等)。 对于此解决方案,您甚至不需要在中设置和参数。

  • 我有以下mysql查询: 我已经编辑了我的问题,以添加我正在使用的两个实体。第一个实体包含频率,我想要加入从另一个实体选择的项目。TFrequency表有一个不变的常量值。这个频率使用ID映射到tEXCELSMSTOSENDSchedule实体。但是,我希望从tfrequence中选择name,而不是映射的id。然后我用它来填充我的数据表。我需要创建第三个实体吗?我不知道这是如何工作的,我一直在尝

  • 我有两个多对多关联的表。 DB详细信息:用户-->列[Id,name]

  • 问题内容: 我试图了解如何在hibernate中最好地实现多态一对多。 例如: 现在,我想保留以下类的审核信息: 什么是适当的映射?另外,Hibernate实际上将如何坚持下去呢?将一系列连接的表的生成(,,),或者是有没有更好的办法? 请注意,我宁愿不要让我的其他实体类暴露联接的另一面(例如on ),但是,如果这是最干净的实现方式,那就足够了。 问题答案: 映射的超类不是实体,因此不能成为关联的

  • 问题内容: 我如何将下面的MySQL查询写入Rails ActiveRecord 我知道如何在两个表上编写联接;但是,我对如何在3个表上使用联接不是很有信心。 问题答案: 要重写您在问题中遇到的SQL查询,我认为它应该类似于以下内容(尽管我很难完全可视化您的模型关系,所以这有点猜测): …这样该方法可以同时处理两个联接以及子句,最后是调用。 作为更多参考: 如果要将多个关联加入同一模型,则可以简单

  • 问题内容: 在hibernate状态下,查询似乎有些困难。我正在两个表上执行内部联接。 产品表: 仓库表: 联接结果: 当我运行查询.. 因此,对于每个结果,我都会得到一个包含a 和a 的对象。 这是预期的。问题是hibernate将产品的ID和名称分配给仓库对象的ID和名称属性。在创建Warehouse项目时,好像联接结果中的前两列已经结束了。产品对象始终包含正确的数据。 关于解决此问题的任何建