首页 > 解决方案 > 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")

标签: hibernatejpa

解决方案


我想在我的 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;

这解决了问题。我可以看到结果加载速度比以前快得多。


推荐阅读