成都没有派对🎉

  • 首页
  • 请我喝茶
  • 蛤?
No Party For ChengDu
  1. 首页
  2. JAVA
  3. 正文

spring-data-jpa只查询部分字段

2018年3月26日 12514点热度 9人点赞 1条评论
使用jpa查询默认会返回表的全部字段,为了查询效率和安全考虑我们有时候需要控制查询返回的字段范围。

不论是nativequery还是hql的query,都可以指定需要查询的字段,只是必须定义这些字段所对应的实体,而且需要一个构造函数,构造函数的参数就是查询的字段列表。举个栗子:

@Entity  
@Table(name="Human")  
@JsonInclude(JsonInclude.Include.NON_NULL)  
public class Human {  
    @Id  
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer humanID;  
  
    private String humanName;  
    //人员代码  
    private String humanCode;  
    private String humanPassword;  
    private String description;  
    //所属单位  
    private Integer unitID;  
    private Integer displayOrder;  
    private Integer identifyType;  
    private Integer activeFlag;  
  
    public Human() {  
    }  
  
    public Human(String humanName) {  
        this.humanName = humanName;  
    }
    
    //getter setter...
}

 

查询人员的实体,我需要返回所有人员的名字。查询如下:

@Query("select new Human (h.humanName) from Human  h ")  
   List<Human> getHumanList();

 

我们需要查询humanName,所以必须要有public Human(String humanName)这个构造函数,而且必须提供默认的构造函数,否则entity无法构造。

这样虽然方便,但是如果返回的字段偏多,那么这个构造函数就参数列表就很长。这种情况最好还是用nativequery,定义的接口其返回类型为List

对于Object[]返回结果的处理如果想做成通用的,可以参考下GSON的反序列化,通过传递T.class,通过反射去构造对象并设置字段。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: spring-data-jpa
最后更新:2018年3月26日

suxiaomi

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

COPYRIGHT © 2023 成都没有派对🎉. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang