2016-09-20 22 views
1

私はneo4jを使用してDBレベルで自分のドメインオブジェクトのいくつかのプロパティを計算し、読み込み専用の結果を返したいと思います。 JPAでは1は、ドメインオブジェクトのエンティティのフィールドの上@Formula注釈を経てこれを達成することができますSpringデータneo4jのJPAの@Formulaアノテーションのアナログ?

@Formula("(select avg(f.rating) from Feedback f where f.offer_id = offer_id)") 
private Double rating; 

を1春データのNeo4jで同じ動作を実現するために何をすべき?私はCypherのクエリを書いたが、どこで使うべきか分からない。

答えて

4

同様の結果が返されるデータを保持するためのフィールドを持つクラスを作成します@QueryResult

  • を用いて達成することができます。
  • 注釈を@QueryResult

例:次のように

@QueryResult 
open class Principal constructor(applicationToken: String, 
          profileId: String, 
          stageName: String, 
          showMeLaterDays: Float, 
          roles: Array<Role>) 
{ 

    var applicationToken: String 
    var profileId: String 
    var stageName: String 
    var showMeLaterDays: Float 

    @Convert(RoleArrayAttributeConverter::class) 
    var roles: Array<Role> 



    init 
    { 
     this.applicationToken = applicationToken 
     this.profileId = profileId 
     this.stageName = stageName 
     this.showMeLaterDays = showMeLaterDays 
     this.roles = roles 
    } 

    //Provide a default constructor for OGM 
    constructor() : this(applicationToken = "", profileId = "", stageName = "", showMeLaterDays = 0f, 
     roles = emptyArray()) 
} 

リポジトリとそれを使用する(私は手に持っていたものであるKotlin、IN):

@Query("MATCH (n:CandidateProfile {applicationToken: {0} }) 
    RETURN n.id as profileId, n.applicationToken as applicationToken, n.stageName as stageName, n.showMeLaterDays as showMeLaterDays, n.roles as roles;") 
fun findByApplicationToken(token: String): Principal? 
  • ノードプロパティがクラスフィールド名に対応するように返される方法に注意してください。
  • 同じことを関数の結果で行うことができます。
+0

注:もっとイディオム的なKotlin POJOについては、https://github.com/neo4j-examples/movies-kotlin-spring-data-neo4jを参照してください。 –

関連する問題