【问题标题】:Micronaut Data simple parent/children relationMicronaut Data 简单的父/子关系
【发布时间】:2021-11-03 20:24:28
【问题描述】:

您好,我正在尝试在 Kotlin 中使用 Micronaut Data 启动一个项目,并且正在尝试建立一个简单的表关系。但是我在使用 micronaut 注释时遇到了麻烦。 父实体和子实体如下:

import io.micronaut.data.annotation.GeneratedValue
import io.micronaut.data.annotation.Id
import io.micronaut.data.annotation.MappedEntity
import io.micronaut.data.annotation.Relation

@MappedEntity
class Parent(
  @Id
  @GeneratedValue
  var id: Long?,
  var name: String?,
  @Relation(value = Relation.Kind.ONE_TO_MANY, mappedBy = "parent")
  val children: Set<Child>?
){
}
import io.micronaut.data.annotation.GeneratedValue
import io.micronaut.data.annotation.Id
import io.micronaut.data.annotation.MappedEntity
import io.micronaut.data.annotation.Relation

@MappedEntity
class Child(
  @Id
  @GeneratedValue
  var id: Long?,
  var name: String?,
  @Relation(value = Relation.Kind.MANY_TO_ONE)
  var parent: Parent?
){
}

我的错误如下:

io.micronaut.context.exceptions.BeanInstantiationException: Bean definition [io.micronaut.data.jdbc.config.SchemaGenerator] could not be loaded: Error instantiating bean of type [io.micronaut.data.jdbc.config.SchemaGenerator]: Identity cannot be missing for: de.mphoenix.data.entities.Parent
    at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:1939)
    at io.micronaut.context.DefaultApplicationContext.initializeContext(DefaultApplicationContext.java:236)
    at io.micronaut.context.DefaultBeanContext.readAllBeanDefinitionClasses(DefaultBeanContext.java:3454)
    at io.micronaut.context.DefaultBeanContext.start(DefaultBeanContext.java:330)
    at io.micronaut.context.DefaultApplicationContext.start(DefaultApplicationContext.java:182)
    at io.micronaut.runtime.Micronaut.start(Micronaut.java:72)
    at de.mphoenix.ApplicationKt.main(Application.kt:8)
Caused by: io.micronaut.context.exceptions.BeanInstantiationException: Error instantiating bean of type [io.micronaut.data.jdbc.config.SchemaGenerator]: Identity cannot be missing for: de.mphoenix.data.entities.Parent
    at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2366)
    at io.micronaut.context.DefaultBeanContext.createAndRegisterSingletonInternal(DefaultBeanContext.java:3282)
    at io.micronaut.context.DefaultBeanContext.loadContextScopeBean(DefaultBeanContext.java:2665)
    at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:1933)
    ... 6 common frames omitted
Caused by: java.lang.IllegalStateException: Identity cannot be missing for: de.mphoenix.data.entities.Parent
    at io.micronaut.data.model.query.builder.AbstractSqlLikeQueryBuilder.traversePersistentProperties(AbstractSqlLikeQueryBuilder.java:1341)
    at io.micronaut.data.model.query.builder.AbstractSqlLikeQueryBuilder.traversePersistentProperties(AbstractSqlLikeQueryBuilder.java:1278)
    at io.micronaut.data.model.query.builder.sql.SqlQueryBuilder.buildCreateTableStatements(SqlQueryBuilder.java:448)
    at io.micronaut.data.jdbc.config.SchemaGenerator.createSchema(SchemaGenerator.java:145)
    at io.micronaut.data.jdbc.config.$SchemaGenerator$Definition.initialize(Unknown Source)
    at io.micronaut.data.jdbc.config.$SchemaGenerator$Definition.build(Unknown Source)
    at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2337)
    ... 9 common frames omitted

如果我删除构造函数中的关系参数,一切都很好,所以关系肯定有问题,但我无法理解它。有人可以帮忙吗?

【问题讨论】:

  • 您能否添加您的项目依赖项(gradle / maven...)并描述您如何构建和运行您的应用程序?

标签: kotlin micronaut micronaut-data


【解决方案1】:

只需添加 @field:Id 而不是 @Id 注释,它应该可以工作。

请参阅第 8.1.5.12 章支持 Kotlin 不可变数据类https://micronaut-projects.github.io/micronaut-data/latest/guide/#kotlinData

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-06
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多