spring data jpa查询一个实体类的部分属性

      使用Spring Data Repository查询时候,通常情况下返回的是一个实体所有的属性。但是在很多情况下,我们只需要实体类的部分属性。下面的部分讲述如何实现查询一个实体类的部分属性。

      首先我们定义两个实体类

    

package cn.net.leadu.domain;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;

/**
 * Created by PengChao on 2016/12/1.
 */
@Entity
public class Person {
    @Id
    @GeneratedValue
    private Long id;
    private String firstName;
    private String lastName;
    @OneToOne
    private Address address;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }
}
package cn.net.leadu.domain;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

/**
 * Created by PengChao on 2016/12/1.
 */
@Entity
public class Address {
    @Id
    @GeneratedValue
    private Long id;
    private String street;
    private String state;
    private String country;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getStreet() {
        return street;
    }

    public void setStreet(String street) {
        this.street = street;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }
}

     然后创建person实体类的repository

package cn.net.leadu.dao;

import cn.net.leadu.domain.Person;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * Created by PengChao on 2016/12/1.
 */
public interface PersonRepository extends JpaRepository<Person, Long> {
    Person findByFirstName(String firstName); // 1
}

    "1"方法将会返回Person对象的所有属性(包括address)



 

但实际情况我们不需要返回address对象,这种情况我们可以定义一个projection,如下:

package cn.net.leadu.domain;
 
/**
 * Created by PengChao on 2016/12/1.
 */
public interface NoAddress {
    String getFirstName(); //2
    String getLasetName(); //3
 
}

    “2”输出person对象的firstName属性,“3”输出person对象的lastName属性

最后在Person实体类的repository中定义一个查询方法,返回值是NoAddress,如下

package cn.net.leadu.dao;

import cn.net.leadu.domain.NoAddress;
import cn.net.leadu.domain.Person;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * Created by PengChao on 2016/12/1.
 */
public interface PersonRepository extends JpaRepository<Person, Long> {
    NoAddress findByFirstName(String firstName);
}

返回结果只包含firstName和lastName两个属性



 

猜你喜欢

转载自543726916.iteye.com/blog/2374252