2017-07-21 6 views
1

私はthis と同様の問題を抱えていますが、私は4つのフィールドから2つだけを取得したいと思います。例えばidとname、dateOfBirth、weightのidとnameだけです。 春のデータリポジトリを返すオブジェクトをどのように変換できますか?

public interface ICatDAO extends CrudRepository<Cat,Long> { 

    @Query(value = "SELECT c.id, c.name FROM Cat c") 
    public List<Cat> findAll(); 
    //... 
} 

私は、クエリを使用している場合

@Query(value = "SELECT c FROM Cat c")私は "猫のオブジェクトのリストタイプを取得しますが、すべてのフィールドを持ちます。

私がクエリ:@Query(value = "SELECT c.id, c.name FROM Cat c")を使用すると、オブジェクトリストタイプ 'Object'が表示され、これが問題になります。この場合、私は何をすべきですか?

+2

を、あなたを参照してください質問から提案の回答を試してみましたか?つまり、DTOを定義し、それをクエリで使用します。あなたのDTOには、idとnameの2つのフィールドがあります。 – Mustafa

答えて

1

hereのようにDTOを使用する必要があります。

あなた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

別のアプローチは、DTOのための「projection」インタフェースを使用することです:

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(); 
} 
+0

ありがとう! :) 私はspring-data-jpaを学ぶ初心者です。私はDTOがとても自由であるとは思っていませんでした。私はクラスのいくつかのフィールドで、いつでも必要な時に使うことができます。うわー!それは本当に良いです! – Damaris

+0

@JustynaDamarisBiniędaようこそ! ))答えが本当に役に立ったら、それをupvoteすることを忘れないでください... – Cepr0

関連する問題