当前位置: 首页 > 面试题库 >

如何重写FetchType.EAGER在运行时变得懒惰

羊舌高峰
2023-03-14
问题内容

使用JPA EntityManager和JPA Query对象,如何覆盖带有注释@OneToMany(fetch =
FetchType.EAGER)的对象,以便在查询中延迟获取?

如果我有hibernate的Query对象,则可以让它创建一个条件对象,并使用此对象将获取类型设置为惰性。但是我必须使用JPA Query对象。这个问题有什么解决办法吗?


问题答案:

即使使用本地Hibernate API,也无法做到这一点。如果将关联定义为EAGER,则将始终加载该关联,并且无法使用查询更改该关联。

事实并非如此:您可以使用查询来急于加载一个懒惰的关联。



 类似资料:
  • 问题内容: 在我们正在开发的此应用程序中,我们注意到一个视图特别慢。我对视图进行了概要分析,发现即使数据库中只有两个对象要获取,hibernate也执行了一个查询,该查询花费了10秒。所有和关系都是懒惰的,所以这不是问题。在检查实际执行的SQL时,我注意到查询中有80多个联接。 在进一步检查该问题时,我注意到该问题是由实体类的深入层次结构和实体之间的关系引起的。所以,我想,我只是让它们变得懒惰,应

  • 使用JPA EntityManager和JPA查询对象,我如何覆盖在查询中惰性获取注释@OneToMany(fetch=FetchType.EAGER)的内容? 如果我有hibernate查询对象,我可以让它创建一个criteria对象,并使用它将fetch类型设置为lazy。但我必须使用JPA查询对象。这个问题有什么解决办法吗?

  • 我创建了一个Spring Boot far-jar,其中包含一个log4j.xml配置文件作为资源。现在,当我运行fat-jar时,我试图以这种方式覆盖它 我在文件夹中放入了一个新的log4j.xml。但是什么都没有,它继续使用JAR中的资源。

  • 当使用JOOQ为SQLServer数据库生成代码时,生成会创建由三部分组成的限定符,如:。这正是我在使用SQL服务器数据库时想要的,但是当使用生成的代码与另一个数据库(如内存数据库中的H2)进行单元测试时,这是一个问题。 H2方言不支持这些由三部分组成的限定词,H2期望类似于[目录]。[表]。这会在针对H2执行以下命令时导致语法错误: 为了解决这个问题,我需要在运行时更改限定符,我认为可以使用渲染

  • 问题内容: 在纯Java中,是否有可能在运行时以编程方式重写类的方法(甚至创建新方法)? 即使我在编译时 不 知道类,我 也 希望能够做到这一点。 我的意思是在运行时重写: 现在,这个调用… …将调用 Injector.myMethod() 而不是 Overrider.myMethod() 。 Injector.myMethod()是 静态的 ,因为在执行“魔术”之后,它是从不同的类实例(这是Ov

  • 问题内容: 在我们正在开发的此应用程序中,我们注意到一个视图特别慢。我剖析了该视图,并注意到,即使数据库中只有两个对象要获取,也执行了一个查询,该查询花费了10秒。所有和关系都是懒惰的,所以这不是问题。在检查实际执行的SQL时,我注意到查询中有80多个联接。 在进一步检查该问题时,我注意到该问题是由实体类的深入层次结构和实体类之间的关系引起的。所以,我想,我只是让它们变得懒惰,应该可以解决问题。但