Spring 数据 neo4j 的 JPA @Formula 注释的模拟?

Analogue of @Formula annotation from JPA for Spring data neo4j?

我想使用 neo4j 和 return 只读结果在数据库级别计算我的域对象的某些属性。在 JPA 中,可以通过对域对象实体字段的 @Formula 注释来实现这一点:

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

要在 Spring data neo4j 中实现相同的行为应该怎么做?我写了一个 Cypher 查询,但不知道在哪里使用它。

使用@QueryResult

可以得到类似的结果
  • 创建一个 class 字段以保存 return 数据。
  • @QueryResult
  • 注释

示例: (在 Kotlin 中,这是我手头的)

@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())
}

然后将其与存储库一起使用,如下所示:

@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?
  • 请注意节点属性 return 与 class 字段名称相对应的方式。
  • 函数结果也可以这样做。