Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FetchType.EAGER需要大量的执行时间_Java_Hibernate_Jpa - Fatal编程技术网

Java FetchType.EAGER需要大量的执行时间

Java FetchType.EAGER需要大量的执行时间,java,hibernate,jpa,Java,Hibernate,Jpa,在我的实体中,我必须使用fetch=FetchType.EAGER,因为我有一个错误: 嵌套异常为org.hibernate.LazyInitializationException:失败 要延迟初始化角色集合,请执行以下操作: “字段应具有FetchType.EAGER”, 无法初始化代理-没有会话 如果我使用这个,那么我的应用程序会正常运行,但执行时间太长,在页面和页面之间大约7秒(现在bbdd几乎没有数据) 我有两个问题 如果我将FetchType.LAZY放入,我的应用程序将无法运行 如

在我的实体中,我必须使用fetch=FetchType.EAGER,因为我有一个错误:

嵌套异常为org.hibernate.LazyInitializationException:失败 要延迟初始化角色集合,请执行以下操作: “字段应具有FetchType.EAGER”, 无法初始化代理-没有会话

如果我使用这个,那么我的应用程序会正常运行,但执行时间太长,在页面和页面之间大约7秒(现在bbdd几乎没有数据)

我有两个问题

  • 如果我将FetchType.LAZY放入,我的应用程序将无法运行
  • 如果我把FetchType.EAGER放进去,我的应用程序有很多执行时间
PF.class(实体)

本科(实体)


谢谢

尝试使用FetchType.LAZY,但请使用
内部连接fetch

纠正您的查询。请尝试阅读此相关问题,这与您面临的问题几乎相同:

根据以上问题的答案,正确的做法是继续使用EAGER fetch类型以避免LazyInitiationException,但是您必须检查select查询并添加一些外部联接以减少查询结果


了解hibernate上的这种行为在本机SQL查询中也会发生,这一点非常重要,因为您的分页速度非常慢。尝试研究一些SQL外部联接以尽量减少分页执行时间。

这不起作用-还会引发LazyInitializationException,因为会话已关闭,有人在分离实体的集合上调用getter。谢谢您的回答。我一直在这样做,你告诉我,我已经在我的存储库中创建了一个查询,用“左外连接”恢复所有pf:
@query(“从PFEntity p左外连接p.hardwareDeviceStocks左外连接p.bS中选择p”)
并且我已经删除了我的实体的“FetchType.EAGER”,但这不起作用。我继续犯同样的错误“无法初始化代理-没有会话”。我一直在读关于你的文章,告诉我,我很明白使用“FetchType.Earge”注释并不是一个错误,你只需要确保你的查询返回尽可能少的正确结果,这样你就可以减少分页时间。不过,感谢您的归来,祝您学习顺利:)
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pf", cascade = CascadeType.ALL)
private Set<HDSEntity> hardwareDeviceStocks = new HashSet<HDSEntity>();

@OneToMany(fetch = FetchType.EAGER, mappedBy = "pf", cascade = CascadeType.ALL)
private Set<BSEntity> bS = new HashSet<BSEntity>();

@OneToMany(cascade = CascadeType.ALL, mappedBy = "pf", fetch = FetchType.EAGER)
private Set<CEntity> cp = new HashSet<CEntity>();
 @ManyToOne(cascade = {CascadeType.ALL})
 @JoinColumn(name = "fk_pf")
 private PFEntity pf;
@ManyToOne(cascade = CascadeType.ALL)
 @JoinColumn(name = "fk_pf")
 private PFEntity pf;