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 字段名称相对应的方式。
- 函数结果也可以这样做。
我想使用 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 字段名称相对应的方式。
- 函数结果也可以这样做。