基于hibernate实现的jpa接口,multiselect不起作用

絕對在乎妳 发布于 2015/03/09 10:14
阅读 2K+
收藏 0

之前问过一次,没有人回答。。。。,再来问多一次~

使用jpa的仓库接口来查询数据,本意是根据条件来查询一个实体的指定属性字段,但是现在却把这个实体的所有属性都查出来了。问问大神们怎么解决。采用的是实现JpaSpecificationExecutor接口:代码如下:

-------------

Specification<Users> spec = new Specification<Users>() {
    @Override
    public Predicate toPredicate(Root<Users> root, CriteriaQuery<?> query,CriteriaBuilder cb) {
        // TODO Auto-generated method stub
        List<Predicate> ps = new ArrayList<Predicate>();
        ps.add(cb.equal(root.<String>get("userName"), userName));
          
        List<Selection<?>> selections = new ArrayList<Selection<?>>();
        selections.add(root.get("id").alias("id"));
        selections.add(root.get("birth").alias("birth"));
        selections.add(root.get("userName").alias("userName"));
          
          
        query.multiselect(selections);
          
        query.where(ps.toArray(new Predicate[ps.size()]));
        return query.getGroupRestriction();
    }
};
    return repository.findOne(spec);



预期是查到id,birth,userName的,现在却是这样:

Hibernate: 
    select
        users0_.id as id1_22_,
        users0_.create_time as create_t2_22_,
        users0_.update_time as update_t3_22_,
        users0_.version as version4_22_,
        users0_.birth as birth5_22_,
        users0_.gendar as gendar6_22_,
        users0_.password as password7_22_,
        users0_.status as status8_22_,
        users0_.user_name as user_nam9_22_ 
    from
        users users0_ 
    where
        users0_.user_name=?



我已经multiselect里设置了,为什么还是这样。。。望解答  

------------------

在网上找了很多都说是在multiselect里用root设置自己要查询的字段属性,可是根本没效果啊~~~

加载中
0
二的基本算合格
二的基本算合格
看这个CriteriaQuery查询,没看出什么问题,如果你有一点点时间,用Spring Data JPA 代替你的数据操作吧,比较来比较去,如果在Java中使用JPA+Spring,Spring DATA JPA算一个最好的解决方案之一了,暂时就不要折腾了。
0
张恒强
张恒强
spring-data-jpa又是由谁来实现的!?  spring-data-jpa也只是单纯的又封装了下jpa吧,没有实现的功能,也只是一个框架。还是需要由实现jpa的框架,例如hibernate。 @二的基本算合格  
二的基本算合格
二的基本算合格
Spring Data JPA是Spring基于JPA规范的基础上封装的ORM框架。Spring Data JPA依赖Spring与Hibernate的确只是一个框架,有其使用限制和应用背景,是否可以在项目中使用,可以由组织大家评审,优秀的第三方产品是可以借鉴和使用的。
0
张恒强
张恒强
这个Specification也是spring-data-jpa的一个东西。我在Pro JPA2这本上看到过一点,应该能解释你的这个问题   你可以用cb来创建一个query,先不要用参数里自带的那个query
0
limaofeng
limaofeng
对返回的字段这么纠结的话,就用mybatis吧。或者混搭。我就这样用的
二的基本算合格
二的基本算合格
楼主已经使用了JPA,再混搭MyBatis,如果Entity多的话楼主还不哭死,在使用了JPA的项目中用Spring Data JPA代替自定义的ORM Repository结构是缩减代码,工作量小,风险可以预估,推荐。
0
絕對在乎妳
絕對在乎妳

引用来自“张恒强”的评论

这个Specification也是spring-data-jpa的一个东西。我在Pro JPA2这本上看到过一点,应该能解释你的这个问题   你可以用cb来创建一个query,先不要用参数里自带的那个query
CriteriaBuilder cb用过这个cb来重新构造过query,但结果还是一样的。。。至于楼上说用mybatis的。。。但是这样就换一套,不太合算吧?还是想多问问,看看有没有解决的办法。。。
0
hibomb
hibomb
楼主,搞定没?
0
絕對在乎妳
絕對在乎妳

引用来自“hibomb”的评论

楼主,搞定没?
没有呢
0
xiwanglr
xiwanglr
https://my.oschina.net/xiwanglr/blog/792962
0
杨博淋

你这样写是不起作用的,可以看一下源码SimpleJpaRepository中,最底层query用的是getQuery方法:

0
杨博淋

直接select了root

絕對在乎妳
絕對在乎妳
是的,确实是在那重新又select了root...
返回顶部
顶部