我在使用Hibernate的DetachedCriteria的SQL中遇到了性能问题.我有一些多对一关系,当Hibernate生成SQL时,它包括FROM中连接的表中的所有字段.当发生这种情况时,它需要MySQL很长时间来运行查询(它还有一个order by和sub查询添加到问题中).对于我目前的50k记录~6秒.当我将SELECT中不必要的字段删除到我关注的域对象时,它在500ms以下运行良好.
有没有办法告诉Hibernate不要包含连接中的字段?
我已经尝试将映射文件中的fetch参数设置为'join'和'select',它在生成的SQL中没有任何区别.
我也尝试过设置不同的根条目,但是从我读过的内容来看,这与分页(我也在做)无关.
我可以尝试将查询编写为HQL,但是使用子查询会让它变得更加令人头疼.
您可以设置一个包含仅您感兴趣的属性列表的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);