当前位置:  开发笔记 > 后端 > 正文

使hibernate不包括select子句中连接表的字段

如何解决《使hibernate不包括select子句中连接表的字段》经验,为你挑选了1个好方法。

我在使用Hibernate的DetachedCriteria的SQL中遇到了性能问题.我有一些多对一关系,当Hibernate生成SQL时,它包括FROM中连接的表中的所有字段.当发生这种情况时,它需要MySQL很长时间来运行查询(它还有一个order by和sub查询添加到问题中).对于我目前的50k记录~6秒.当我将SELECT中不必要的字段删除到我关注的域对象时,它在500ms以下运行良好.

有没有办法告诉Hibernate不要包含连接中的字段?

我已经尝试将映射文件中的fetch参数设置为'join'和'select',它在生成的SQL中没有任何区别.

我也尝试过设置不同的根条目,但是从我读过的内容来看,这与分页(我也在做)无关.

我可以尝试将查询编写为HQL,但是使用子查询会让它变得更加令人头疼.



1> Matt Sidesin..:

您可以设置一个包含仅您感兴趣的属性列表的Projection.

以下是过去项目的示例:

Criteria criteria = getSession().createCriteria(Something.class);
criteria.createCriteria("user", "u");

// only retrieve the following fields: id, state, viewCount, user.username
ProjectionList properties = Projections.projectionList();
properties.add(Projections.property("id"));
properties.add(Projections.property("state"));
properties.add(Projections.property("viewCount"));
properties.add(Projections.property("u.username"));

criteria.setProjection(properties);

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有