query specified join fetching, but the owner of the fetched association was not present in the select list
2016-01-15 21:09
756 查看
报标题的错误,是因为在 select count的时候,不需要fetch
所以在取完count以后,再把fetch加进去,变成left join fetch
/**
* 请把jhql以o为返回对象,例如“from user o where”
*
* @param jhql
* @param pageSize
* @param page
* @return
*/
public <T> Page<T> getPageListByJHQL(String jhql, int pageSize, int page) {
StringBuffer countHql = new StringBuffer("select count(o) ");
StringBuffer singleHql = new StringBuffer("select o ");
Query countQuery = em.createQuery(countHql.append(jhql).toString());
long count = (Long) countQuery.getSingleResult();
if (count == 0)
return null;
int index = (page - 1) * pageSize;
Query query = em.createQuery(singleHql.append(
jhql.replace("left join", "left join fetch")).toString());
List<T> list = query.setMaxResults(pageSize).setFirstResult(index)
.getResultList();
em.clear(); // 分离内存中受EntityManager管理的实体bean,让VM进行垃圾回收
PageRequest pageRequest = new PageRequest(page, pageSize);
Page<T> pageList = new PageImpl<T>(list, pageRequest, count);
return pageList;
}
所以在取完count以后,再把fetch加进去,变成left join fetch
/**
* 请把jhql以o为返回对象,例如“from user o where”
*
* @param jhql
* @param pageSize
* @param page
* @return
*/
public <T> Page<T> getPageListByJHQL(String jhql, int pageSize, int page) {
StringBuffer countHql = new StringBuffer("select count(o) ");
StringBuffer singleHql = new StringBuffer("select o ");
Query countQuery = em.createQuery(countHql.append(jhql).toString());
long count = (Long) countQuery.getSingleResult();
if (count == 0)
return null;
int index = (page - 1) * pageSize;
Query query = em.createQuery(singleHql.append(
jhql.replace("left join", "left join fetch")).toString());
List<T> list = query.setMaxResults(pageSize).setFirstResult(index)
.getResultList();
em.clear(); // 分离内存中受EntityManager管理的实体bean,让VM进行垃圾回收
PageRequest pageRequest = new PageRequest(page, pageSize);
Page<T> pageList = new PageImpl<T>(list, pageRequest, count);
return pageList;
}
相关文章推荐
- Android开发出现Warning:Gradle version 2.10 is required. Current version is 2.8. If u
- 【Codeforces 570D 】Tree Requests dfs序+二分
- iOS 【关于几个常用UIColor宏定义】
- Animation动画详解(四)——ValueAnimator基本使用
- 【UEditor】百度UE富文本自定义按钮添加文本
- Android UI之ImageSwitcher && TextSwitcher 实现图文翻页
- Django+Query
- Dissecting Message Queues(不同消息中间件Throughput和latency
- Java对象的强、软、弱和虚引用原理+结合ReferenceQueue对象构造Java对象的高速缓存器
- easyui 自定义验证,动态设置提示信息
- EasyUI 1.3.6 DateBox添加清空按钮
- KVC中setValuesForKeysWithDictionary用法
- easyui datagrid 表格组件列属性formatter和styler使用方法
- UI相关
- AFNetWorking 请求数据报”Request failed: unacceptable content-type: text/plain” 错误解决方法
- 初识Android的界面UI
- UI课程(TabBarController)
- UINavigationController从右边缘也可滑动返回
- 优化UITableViewCell高度计算的那些事
- git 上的pull request 是什么意思?