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

关于Spring Data jpa(+Hibernate)“Findone”生成的SQL查询

公孙新觉
2023-03-14

我有一个与多个代码/标签实体关联的主jpa实体。

当我使用findone(mainEntityId)时,我可以看到Hibernate正在创建一个带有多个“left join”的SQL查询,这是我应该手工完成的。

有没有办法做到这一点,怎么做?

共有1个答案

陶乐生
2023-03-14

您可以通过@EntityGraph注释或显式定义带有fetch JOIN的查询来实现这一点:

@EntityGraph(attributePaths = "children")
Parent findByName(String name);

@Query("select p from Parent p join fetch p.children")
Parent findByName(String name);
 类似资料:
  • 问题内容: 我有一些看起来像这样的Hibernate实体(省略了getter和setter): 当我查询EntityA时,它的加载情况很好,父关联被Hibernate代理(因为它是惰性的)代替了。如果要访问父母的ID,请执行以下调用: 据我了解,该调用不应往返于数据库,因为Id存储在EntityA表中,并且代理应仅返回该值。但是,在我的情况下,这会生成一条SQL语句,该语句将提取EntityB并仅

  • 但是生成的SQL查询是 正如您所看到的,括号改变了,我相信两个查询中的条件并不相同。是虫子吗?使用hibernate和spring以及postgresql数据库。

  • 我有一个带有HiberNate的Spring MVC应用程序。早些时候,我有一个类,它与每个实体的会话(数据库)一起工作,一切都很好。现在,我有一个抽象的道类,它由每个实体的一个类继承。当我想在数据库中插入新数据时,一切都很好。但是当我想更新数据时,它们会到达控制器(我可以在控制台中打印它们),但是HiberNate不会生成用于更新的sql代码。我打开HiberNate的属性来显示sql,我看到h

  • 我想用预处理器实现虚拟视图。一个简单的例子: HQL之前: 有效HQL后: 本质上,我需要一种在执行查询之前处理查询的方法(而不是在运行中创建视图,这会产生很高的成本)。

  • 我有一个复合密钥的实体。订阅和源具有多对多的关系。 我正在使用Spring数据存储库来处理它。 当我尝试使用方法saveAll时,它会抛出 “com.mysql.jdbc.exceptions.jdbc4.mysqlsyntaxerrorexception:未知列'subscripti0_.subscription_id'” 同时尝试在保存后返回值。 Hibernate生成以下查询: 所以,现在我

  • 问题内容: 对于像老兄一样工作的安全系统(例如受监视的强制访问控制),我们必须拦截并处理hibernate生成的所有选择语句。我们将用户,时间戳和sql选择存储在数据库中,以使用其他工具进行某些性能分析。这些信息可以确定用户尝试查看的内容。对于选择语句,准备好的属性很有价值。我们需要完整的SQL语句,包括所有参数。 是否有任何侦听器或拦截器可以加入并处理所有这些事情?迄今为止最大的突出问题是语句参