使一人关系懒惰在我们正在开发的这个应用程序中,我们注意到视图特别慢。我分析了视图,并注意到Hibernate执行了一个查询,即使数据库中只有两个对象要获取,它也要花费10秒的时间。全OneToMany和ManyToMany关系很懒惰,所以这不是问题所在。在检查正在执行的实际SQL时,我注意到查询中有80多个联接。进一步考察这个问题,我注意到这个问题是由深层次的OneToOne和ManyToOne实体类之间的关系。所以,我想,我只会让他们偷懒,这应该能解决问题。但是注释@OneToOne(fetch=FetchType.LAZY)或@ManyToOne(fetch=FetchType.LAZY)似乎不起作用。要么我得到一个异常,要么它们实际上没有被代理对象替换,因此很懒。知道我该怎么做吗?注意,我没有使用persistence.xml要定义关系或配置细节,所有操作都是用java代码完成的。
3 回答
烙印99
TA贡献1829条经验 获得超13个赞
Hibernate中XToOnes的基本思想是,它们在大多数情况下并不懒惰。
一个原因是,当Hibernate必须决定放置代理(带有id)或空时,
无论如何,它必须看另一张桌子。加入。访问数据库中的另一个表的代价很大,所以它最好在此时获取该表的数据(非懒惰行为),而不是在以后的请求中获取该数据,这将需要对同一表进行第二次访问。
添加回答
举报
0/150
提交
取消