无法在 Kotlin 中创建节点

问题描述 投票:0回答:1

我使用的是 neo4j ogm 版本 4.0.10。 我正在尝试使用 Kotlin(没有 Spring)保存 @NodeEntity 对象,但我得到了 IllegalArgumentException。

我在项目中配置了无参数插件。

我的节点类看起来像这样

package pl.bfelis.rpg.nodes

/// IMPORTS 

@Serializable
@NodeEntity
data class CampaignNode(
    @Index
    var uid: String,
    var name: String
) {

    @Id
    @GeneratedValue
    var id: String? = null
}

我正在使用正确的包创建 SessionFactory:

fun getNeo4j(config: Neo4jConfig): SessionFactory {
    val configuration: Configuration = Configuration.Builder()
        .uri(config.url)
        .credentials(config.user, config.password)
        .build()

    return SessionFactory(configuration, "pl.bfelis.rpg.nodes")
}

但是,当尝试保存此类对象时,我遇到了这样的异常 -

java.lang.IllegalArgumentException: Can not get java.lang.String field pl.bfelis.rpg.nodes.CampaignNode.id on pl.bfelis.rpg.nodes.CampaignNode

堆栈跟踪:

java.lang.IllegalArgumentException: Can not get java.lang.String field pl.bfelis.rpg.nodes.CampaignNode.id on pl.bfelis.rpg.nodes.CampaignNode
    at java.base/jdk.internal.reflect.MethodHandleFieldAccessorImpl.newGetIllegalArgumentException(MethodHandleFieldAccessorImpl.java:86)
    at java.base/jdk.internal.reflect.MethodHandleObjectFieldAccessorImpl.get(MethodHandleObjectFieldAccessorImpl.java:61)
    at java.base/java.lang.reflect.Field.get(Field.java:444)
    at org.neo4j.ogm.metadata.FieldInfo.read(FieldInfo.java:430)
    at org.neo4j.ogm.metadata.FieldInfo.readProperty(FieldInfo.java:488)
    at org.neo4j.ogm.utils.EntityUtils.identity(EntityUtils.java:57)
    at org.neo4j.ogm.context.MappingContext.nativeId(MappingContext.java:552)
    at org.neo4j.ogm.cypher.compiler.CypherContext.getIdentity(CypherContext.java:66)
    at org.neo4j.ogm.cypher.compiler.CypherContext.visitedNode(CypherContext.java:90)
    at org.neo4j.ogm.context.EntityGraphMapper.mapEntity(EntityGraphMapper.java:267)
    at org.neo4j.ogm.context.EntityGraphMapper.map(EntityGraphMapper.java:170)
    at org.neo4j.ogm.session.delegates.SaveDelegate.lambda$save$1(SaveDelegate.java:89)
    at java.base/java.util.Collections$SingletonList.forEach(Collections.java:5186)
    at org.neo4j.ogm.session.delegates.SaveDelegate.save(SaveDelegate.java:89)
    at org.neo4j.ogm.session.delegates.SaveDelegate.save(SaveDelegate.java:51)
    at org.neo4j.ogm.session.Neo4jSession.save(Neo4jSession.java:490)
    at pl.bfelis.rpg.domain.campaign.CampaignService.createCampaign(CampaignService.kt:33)
    at pl.bfelis.rpg.domain.campaign.CampaingRoutesKt$campaignRoutes$1$1.invokeSuspend(CampaingRoutes.kt:33)
    at pl.bfelis.rpg.domain.campaign.CampaingRoutesKt$campaignRoutes$1$1.invoke(CampaingRoutes.kt)
    at pl.bfelis.rpg.domain.campaign.CampaingRoutesKt$campaignRoutes$1$1.invoke(CampaingRoutes.kt)
    at io.ktor.server.resources.RoutingKt$handle$2.invokeSuspend(Routing.kt:265)
    at io.ktor.server.resources.RoutingKt$handle$2.invoke(Routing.kt)
    at io.ktor.server.resources.RoutingKt$handle$2.invoke(Routing.kt)
    at io.ktor.server.routing.Route$buildPipeline$1$1.invokeSuspend(Route.kt:116)
    at io.ktor.server.routing.Route$buildPipeline$1$1.invoke(Route.kt)
    at io.ktor.server.routing.Route$buildPipeline$1$1.invoke(Route.kt)
    at io.ktor.util.pipeline.DebugPipelineContext.proceedLoop(DebugPipelineContext.kt:80)
    at io.ktor.util.pipeline.DebugPipelineContext.access$proceedLoop(DebugPipelineContext.kt:16)
    at io.ktor.util.pipeline.DebugPipelineContext$proceedLoop$1.invokeSuspend(DebugPipelineContext.kt)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
    at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:469)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569)
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:994)
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at io.ktor.server.netty.EventLoopGroupProxy$Companion.create$lambda$1$lambda$0(NettyApplicationEngine.kt:296)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.base/java.lang.Thread.run(Thread.java:1583)
kotlin neo4j-ogm
1个回答
0
投票

请尝试将

id
移动到主构造函数中,如下所示:

@NodeEntity
data class CampaignNode(
    @Id
    @GeneratedValue
    var id: String? = null,

    @Index
    var uid: String,
    var name: String
)
© www.soinside.com 2019 - 2024. All rights reserved.