如何转换Spring数据存储库返回的对象?

时间:2017-07-21 20:18:54

标签: java spring spring-data spring-data-jpa jpql

我看过this 我有类似的问题,但我想从四个字段中只得到两个 - 例如:id,name,dateOfBirth,weight中只有id和name。

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Fragment pFragment = getSupportFragmentManager().findFragmentById(R.id.content);
        if (pFragment instanceof CurrentPanchangDialog) {
            if (pFragment != null) {
                pFragment.onActivityResult(requestCode, resultCode, data);
            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

如果我使用查询: public interface ICatDAO extends CrudRepository<Cat,Long> { @Query(value = "SELECT c.id, c.name FROM Cat c") public List<Cat> findAll(); //... } 我会获得对象列表类型&#39; Cat&#39;但是包含所有字段。

如果我使用查询:@Query(value = "SELECT c FROM Cat c")我会获得对象列表类型&#39;对象&#39;这就是问题所在。在这种情况下我该怎么做?

1 个答案:

答案 0 :(得分:2)

您需要使用DTO之类的here

创建CatDto

public class CatDto {
    private Long id;
    private String name;

    public CatDto(Long id, String name) {
        this.id = id;
        this.name = name;
    }
    // getters, setters and other stuff you need 
}

然后编辑你的回购:

public interface CatRepo extends CrudRepository<Cat,Long> {

    //...
    @Query("select new ...CatDto(c.id, c.name) from Cat c")
    public List<CatDto> getCatDtos(); 
}

您将获得CatDto的列表。

...CatDto(...) - 是CatDto构造函数的fully qualified name。对于考试com.example.mycatproject.domain.CatDto

另一种方法是使用“projection”界面进行DTO:

public interface CatDto {
    Long getId();
    String getName();
}

public interface CatRepo extends CrudRepository<Cat,Long> {

    //...
    @Query("select c.id as id, c.name as name from Cat c")
    public List<CatDto> getCatDtos(); 
}