小编Chr*_*ian的帖子

Micronaut 数据:使用自动生成的父 ID 插入父子关系失败,导致未设置外键

偶然发现一个问题:在一对多关系中,似乎从父实体自动生成的主键不会馈送到子实体。

我将生产代码归结为以下示例:

  1. 实体,父级和子级的一对多关系,均具有数据库生成的主键字段(Kotlin 代码):
import io.micronaut.data.annotation.GeneratedValue
import io.micronaut.data.annotation.Id
import io.micronaut.data.annotation.MappedEntity
import io.micronaut.data.annotation.Relation
import io.micronaut.data.annotation.Relation.Cascade.PERSIST
import io.micronaut.data.annotation.Relation.Kind.ONE_TO_MANY
import io.micronaut.data.model.naming.NamingStrategies

@MappedEntity("Parent", namingStrategy = NamingStrategies.Raw::class)
data class Parent(
  @GeneratedValue @field:Id val id: Long?,
  val name: String,
  @field:Relation(ONE_TO_MANY, mappedBy = "parent_id", cascade = [PERSIST])
  val children: List<Child>? = emptyList()
) {
  // Copy-constructor, used by ORM:
  constructor(
    name: String,
    children: List<Child>?
  ) : this(
    null,
    name,
    children
  )
}

@MappedEntity("Child", namingStrategy = NamingStrategies.Raw::class)
data class Child(
  @GeneratedValue @field:Id val id: Long?,
  val parent_id: Long?, …
Run Code Online (Sandbox Code Playgroud)

micronaut-data

5
推荐指数
0
解决办法
841
查看次数

Gradle 升级 7.2 &gt; 7.3 中断,“此属性的值是最终的,不能进一步更改”(使用 Micronaut 插件?)

我使用 Micronaut 3.1.3 和 Gradle 7.2 来构建我的项目。

切换到 Gradle 7.3后,内置中断会发出一些上下文无关的错误消息:

$ ./gradlew clean build
Executed by Gradle 7.3
- using Java 11.0.13
- using Kotlin 1.5.31
- using Groovy 3.0.9

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project '[PROJECT]'.
> The value for this property is final and cannot be changed any further.
Run Code Online (Sandbox Code Playgroud)

随着--stacktrace一条很长的痕迹出现。以下摘录让我猜测问题可能出在 Micronaut 插件上:

* Exception is:
org.gradle.api.ProjectConfigurationException: A problem occurred configuring root project '[PROJECT]'.
        at org.gradle.configuration.project.LifecycleProjectEvaluator.wrapException(LifecycleProjectEvaluator.java:75) …
Run Code Online (Sandbox Code Playgroud)

gradle gradle-plugin micronaut

5
推荐指数
1
解决办法
3373
查看次数

基于 Micronaut 的应用程序构建的 Gradle 因不兼容而导致来自 3rd-party Snakeyaml lib 的 NoSuchMethodError 中断。使用 OpenAPI 生成器插件

自上周(首次发生于 2023 年 5 月 9 日)以来,我们基于 Micronaut 的应用程序的 Gradle 构建失败了

[...]

> Task :openApiGenerate FAILED
Error snake-parsing yaml content
java.lang.NoSuchMethodError: org.yaml.snakeyaml.constructor.SafeConstructor: method 'void <init>()' not found
        at io.swagger.v3.parser.util.DeserializationUtils$CustomSnakeYamlConstructor.<init>(DeserializationUtils.java:393)
        at io.swagger.v3.parser.util.DeserializationUtils.readYamlTree(DeserializationUtils.java:207)
        at io.swagger.v3.parser.util.DeserializationUtils.deserializeIntoTree(DeserializationUtils.java:143)
        at io.swagger.v3.parser.OpenAPIV3Parser.readContents(OpenAPIV3Parser.java:165)
        at io.swagger.v3.parser.OpenAPIV3Parser.readLocation(OpenAPIV3Parser.java:94)
        at io.swagger.parser.OpenAPIParser.readLocation(OpenAPIParser.java:16)
        at org.openapitools.codegen.config.CodegenConfigurator.toContext(CodegenConfigurator.java:589)
        at org.openapitools.codegen.config.CodegenConfigurator.toClientOptInput(CodegenConfigurator.java:647)
        at org.openapitools.generator.gradle.plugin.tasks.GenerateTask.doWork(GenerateTask.kt:825)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java
        [...]
Run Code Online (Sandbox Code Playgroud)

该项目利用了——除其他外——

在调查了一些可能的根本原因后,对我来说,这似乎是由于 3rd-party lib 的snakeyaml版本与该库的“交叉使用”之间的1.332.0兼容更改引起的:

米克罗特3.9.1

使用snakeyaml版本,在他的BOM2.0中声明:

$ ./gradlew dependencyInsight --dependency …
Run Code Online (Sandbox Code Playgroud)

gradle openapi-generator micronaut-openapi

5
推荐指数
0
解决办法
987
查看次数