2017-10-22 9 views
0

私はこのようなオブジェクトがあります。スプリングデータjpa - オブジェクトを返す最も良い方法は?

@Entity 
public class DocumentationRecord { 
    @Id 
    @GeneratedValue 
    private long id; 

    private String topic; 
    private boolean isParent; 
    @OneToMany 
    private List<DocumentationRecord> children; 
... 
} 

今私が話題とIDのみを取得したいと思います。このような形式でそれを取得する方法はあります:

[ 
{ 
id: 4234234, 
topic: "fsdfsdf" 
},... 
] 

だけでもこのクエリに

public interface DocumentationRecordRepository extends CrudRepository<DocumentationRecord, Long> { 

    @Query("SELECT d.topic as topic, d.id as id FROM DocumentationRecord d") 
    List<DocumentationRecord> getAllTopics(); 
} 

を使用して、私はこれだけのようなレコードを取得することができたので:

[ 
    [ 
    "youngChild topic", 
    317 
    ], 
    [ 
    "oldChild topic", 
    318 
    ], 
    [ 
    "child topic", 
    319 
    ], 
] 

Iドン配列の配列が好きです。プロパティIDとトピックを持つオブジェクトの配列を取得したいと思います。それを達成する最も良い方法は何ですか?

答えて

5

以下のようなSTH:ベース

インタフェース:(DTO)に基づく

public interface IdAndTopic { 
    Long getId(); 
    String getTopic(); 
} 

クラス:

@Value // Lombok annotation 
public class IdAndTopic { 
    Long id; 
    String topic; 
} 

Thエンあなたのレポで簡単なクエリメソッドを作成します。

public interface DocumentationRecordRepository extends CrudRepository<DocumentationRecord, Long> { 

    List<IdAndTopic> findBy(); 
} 

あなたも、動的なクエリメソッドを作成することができます

List<DocumentationRecord> records = findBy(DocumentationRecord.class); 
List<IdAndTopic> idAndTopics = findBy(IdAndTopic.class); 
:このようにそれを使用すると

List<T> findBy(Class<T> type); 

1

属性idとtopicを持つクラスを作成し、コンストラクタ注入をクエリに使用できます。

あなたが projectionsを使用することができます春データJPAでは
@Query("SELECT NEW your.package.SomeObject(d.id, d.topic) FROM DocumentationRecord d") 
関連する問題