Hap*_*eer 3 java hibernate hql
以下查询应该返回大约800个对象.问题是hibernate实际上执行了800个查询来获取它们.它似乎执行一个查询来获取id,然后为每个对象执行一个查询以获取有关该对象的特定数据.此查询返回需要60秒以上.
List<AUser> result = em.createQuery("FROM AUser where company=:companyId")
.setParameter("companyId",company.getId())
.getResultList();
Run Code Online (Sandbox Code Playgroud)
本机查询要快得多.
List<AUser> result = em.createNativeQuery("select a.* FROM AUser a where a.company=:companyId")
.setParameter("companyId",company.getId())
.getResultList();
Run Code Online (Sandbox Code Playgroud)
上述查询返回时间不到一秒.
为什么不同?
原始问题是由AUser急切获取的财产(由HappyEngineer在评论中确认)引起的.
回答后续问题:
通常,最好的方法是将关联映射为惰性:
@ManyToOne(fetch = FetchType.LAZY)
private Company company;
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用join fetch以下命令覆盖查询中的提取模式:
select user
from AUser user left join fetch user.company
where user.company.id = :companyId
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅Hibernate文档中的" 关联和联接"一章.
| 归档时间: |
|
| 查看次数: |
4842 次 |
| 最近记录: |