当前位置: 首页 > 知识库问答 >
问题:

Micronaut数据简单的父/子关系

花飞尘
2023-03-14

嗨,我正在尝试在Kotlin启动一个使用Micronaut数据的项目,我正在尝试建立一个简单的表关系。然而,我在使用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

如果我删除构造函数中的关系参数,一切都很好,因此关系肯定有问题,但我不能对此置之不理。有人能帮忙吗?

共有1个答案

盖成弘
2023-03-14

只需添加字段Id而不是Id注释,就可以了。

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

 类似资料:
  • 问题内容: 关于以下与Hibernate有关的问题,我几乎看不到任何指针。这涉及到使用具有自身父子关系的单个数据库表来实现继承。例如: 在这里, managerId 列可以为null,或者可以指向 Employee 表的另一行。业务规则要求员工了解他的所有报告人以及他/她的经理。业务规则还允许行具有为空的 managerId (组织的CEO没有经理)。 我们如何在Hibernate中映射此关系,标

  • 我使用Spring数据弹性搜索用于搜索/缓存目的。我需要执行一个使用child(TermCache)和parent(ConceptCache)属性的查询,并返回子对象的实例(这意味着我不能使用嵌套对象)。 我有以下结构: 我需要一个关于如何处理这类任务的提示;我应该使用两个单独的查询,还是应该以某种方式获取父对象的属性,或者其他什么?

  • 我有一个场景,需要在一种情况下加载所有子值,在另一种情况下加载一些特定的子值。我对这两种情况都使用一个bean,并使用命名查询编写查询。 现在在我的查询2中,我只需要加载字符串A,而不需要加载字符串B和字符串C。我试过使用 但得到以下错误 那么,关于如何继续这方面的任何建议。。

  • 使用JPA(Hibernate)我试图实现以下关系,并想知道其他人是否对最佳方法有任何建议: 基本上是完全不相关的对象,每个对象都有一个公共子对象的集合;在对象模型中实现简单,在数据库中稍微麻烦些! 我确信这一定是常见的事情,但是我很难找到任何示例实现,因为我真的不知道正确的搜索词。 谢谢你的时间!

  • 伪代码: 为什么大多数程序通常不允许这样做(我从未见过)? 程序不能识别出它何时进行了循环并停止执行任务吗? 对于实例: 假设这些对象是3d网格,我们想在x轴上转换对象A 2个单位。通常,父子关系会移动A的任何子级。所以它穿过子树,并用A翻译x轴上的每个子级2个单位。然后它到达树中的对象A,而不是移动它,为什么不让它检查身份,如果身份返回true,然后停止移动东西? 这只是软件开发人员的懒惰吗?

  • 我目前正在将现有的Micronaut应用程序从版本1.2. x升级到2.2.1(最新),我认为开始使用来执行任何数据库交互也是一个好主意是必需的。 我已经实现了所有各种代码更改,并且还将代码移植到使用Micronaut自己的存储库,但是每当我启动应用程序时,每次它尝试执行任何类型的数据库相关交互时,都会失败并出现以下错误: 我遵循了这里找到的关于设置Micronaut Data的配置指南,我想我已