如何解决Micronaut-data:对于使用 Kotlin 和 MariaDB
在最基本的示例案例中试图克服以下错误:
任务:kaptKotlin 失败 错误:无法实现存储库方法:UserRepository.update(Object entity)。存储库 [com.te.repositories.UserRepository] 的无效查询方法 [update]:未找到实体 ID:com.te.model.User 注意:将reflect-config.json文件写入目的地:META-INF/native-image/com.te/model/reflect-config.json注意:将resource-config.json文件写入目的地:META-INF/native-image/ com.te/model/resource-config.json注:为4个类型元素创建bean类 FAILURE:构建失败,出现异常。 * 什么地方出了错: 任务 ':kaptKotlin' 执行失败。 执行 org.jetbrains.kotlin.gradle.internal.KaptExecution 时发生故障 java.lang.reflect.InvocationTargetException(无错误提示)
在 https://micronaut.io/launch/ 处剔除项目并尝试执行基本的 CRUD 操作(在我克服了这个初始错误之后……)。执行 ./gradlew clean build
会产生上述错误,我一直无法解决 - 感谢帮助或见解 - ty。
application.yml
micronaut:
application:
name: demo
datasources:
default:
url: jdbc:mariadb://127.0.0.1:3306/test
driverClassName: org.mariadb.jdbc.Driver
username: root
password: passwd
dialect: MYSQL
poolName: muhPool
maximumPoolSize: 50
minimumIdle: 10
isAutoCommit: false
connectionTimeout: 250
idleTimeout: 60000
readOnly: false
cachePrepStmts: true
prepStmtCacheSize: 250
prepStmtCacheSqlLimit: 2048
maintainTimeStats: false
用户表 (mariaDB v10.3)
CREATE TABLE IF NOT EXISTS user (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,fname VARCHAR(50),lname VARCHAR(50),email VARCHAR(256)
);
INSERT INTO user (fname,lname,email) VALUES ('Pete','Jones','pete.jones@example.com');
INSERT INTO user (fname,email) VALUES ('Paula','notabdule@example.com');
User.kt
import io.micronaut.data.annotation.GeneratedValue
import io.micronaut.data.annotation.Id
import io.micronaut.data.annotation.MappedEntity
@MappedEntity(value="user")
data class User(@Id @GeneratedValue
var id: Int,var fname: String,var lname: String,var email: String)
UserRepository.kt
import com.te.model.User
import io.micronaut.data.jdbc.annotation.JdbcRepository
import io.micronaut.data.model.query.builder.sql.Dialect
import io.micronaut.data.repository.CrudRepository
@JdbcRepository(dialect = Dialect.MYSQL)
interface UserRepository : CrudRepository<User,Int> {}
build.gradle.kts
group = "com.te"
val kotlinVersion=project.properties.get("kotlinVersion")
repositories {
mavenCentral()
}
micronaut {
runtime("netty")
testRuntime("spock2")
processing {
incremental(true)
annotations("com.te.*")
}
}
dependencies {
kapt("io.micronaut.data:micronaut-data-processor")
implementation("io.micronaut:micronaut-http-client")
implementation("io.micronaut:micronaut-runtime")
implementation("io.micronaut.data:micronaut-data-jdbc")
implementation("io.micronaut.kotlin:micronaut-kotlin-runtime")
implementation("io.micronaut.sql:micronaut-jdbc-hikari")
implementation("javax.annotation:javax.annotation-api")
implementation("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}")
runtimeOnly("ch.qos.logback:logback-classic")
runtimeOnly("org.mariadb.jdbc:mariadb-java-client")
testImplementation("org.testcontainers:mariadb")
testImplementation("org.testcontainers:spock")
testImplementation("org.testcontainers:testcontainers")
compileOnly("org.graalvm.nativeimage:svm")
implementation("io.micronaut:micronaut-validation")
runtimeOnly("com.fasterxml.jackson.module:jackson-module-kotlin")
}
application {
mainClass.set("com.te.ApplicationKt")
}
java {
sourceCompatibility = JavaVersion.toVersion("11")
}
tasks {
compileKotlin {
kotlinOptions {
jvmTarget = "11"
}
}
compileTestKotlin {
kotlinOptions {
jvmTarget = "11"
}
}
}
解决方法
每个@graemerocher:
见 https://micronaut-projects.github.io/micronaut-data/latest/guide/#kotlinData
Id 必须是 @field:Id
更新的 User.kt:
@MappedEntity(value="user")
data class User(@field:Id @GeneratedValue
var id: Int,var fname: String,var lname: String,var email: String)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。