使用spring data jpa 心得

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. JpaSpecificationExecutor.findAll(new Specification<T>(){  
  2.   
  3.    public Predicate toPredicate(Root<TabSgUserPackage> root, CriteriaQuery<?> query, CriteriaBuilder builder) {  
  4.   
  5. }  
  6.   
  7. })  

最近一直使用springside 4 (spring data jpa(hibernate) + springMVC ) 今天遇到非常棘手的问题。 使用findAll 分页的时候

如果调用root.fetch().....会报异常aused by: java.lang.IllegalArgumentException: org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list ........  select count(*) from ....

查一查百度原因解释是使用count 聚合函数不能调用fetch。

要查询指定的的对象,但owner没有关联目前选择的集合或者对象。

 然后看到这篇帖子

Paged findAll(…) with Specification does not work with join fetch

The way I've handled this is to use the CriteriaQuery.getResultType() method to check whether the query's projection is Long or the class the Specification is operating on. If the resultType is Long, the query is a count and no join fetches should be used. If the resultType is the class the Specification is operating on, it's a normal query and fetch joins can be used.

如上是一楼沙发的回答。 

判断结果类型是否是long类型 来决定是否fetch
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值