hibernate - getResultList() 性能很慢
问题描述
我正在尝试从我的数据库中获取列表,从数据库端查询性能很快(0.04 秒),但是当我尝试在应用程序中使用它时,加载列表需要时间(8 秒)。
我已经尝试过 CreateNativeQuery 而不是 createNamedQuery 但我没有看到任何改进。
Query q = em.createNamedQuery("findMostUsedPlaylists");
q.setMaxResults(20);
@SuppressWarnings("unchecked")
final List<Playlist> results = (List<Playlist>) q.getResultList();
@NamedQuery( name = "findMostUsedPlaylists", query = "select p from Playlist p where p.sharing = 'PUBLIC' order by p.useCount desc")
解决方案
我想在我的 Playlist 类中急切地加载大量关联是问题所在。
List<Playlist> results = new ArrayList<>();
final List<Object> sqlOutput = em.createNativeQuery("select * from playlist p where
p.sharing = 'PUBLIC' order by p.use_count desc").setMaxResults(20).getResultList();
// i'm just showing an example here.
for (Object o : sqlOutput) {
Object[] row = (Object[])o;
Playlist l = new Playlist();
l.setPlaylistId( ((BigInteger) row[0]).longValue());
l.setHidden((Boolean) row[1]);
results.add(l);
}
return results;
这解决了问题。我可以看到结果加载速度比以前快得多。
推荐阅读
- python-3.x - 如何将长时间的月份和年份序列重新采样为具有每月平均值的单个平均(可能不存在)年份?
- python - Python/Pandas:比较不同 CSV 文件中长度不同的两个字符串列,并找出数据相同的位置
- php - 对文件进行更改后,PHP 文件无法从数据库中提取和拆分图像
- python - 已从模块导入后的 Python 修补(使用 unittest.mock)功能
- c++ - C++:递归锁——有什么缺点吗?
- java - Java - java.lang.UnsatisfiedLinkError
- django - 如何为孩子使用通用视图
- android - 从 Kotlin 中的其他活动开始活动。它在加载 xml 之前崩溃
- javascript - 动态创建返回对象属性的getter
- java - java.lang.IllegalStateException:在异步方面使用 RequestContextHolder.currentRequestAttributes() 时未找到线程绑定请求