Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 无法使用picocli和micronaut连接数据库_Kotlin_Micronaut_Micronaut Data_Picocli - Fatal编程技术网

Kotlin 无法使用picocli和micronaut连接数据库

Kotlin 无法使用picocli和micronaut连接数据库,kotlin,micronaut,micronaut-data,picocli,Kotlin,Micronaut,Micronaut Data,Picocli,我使用picocli连接数据库并构建本机映像。我使用micronaut连接到postgres,在执行picocli原生构建的图像时获得一些数据。但我在使用entityManager时遇到了问题。当我使用@Inject使用实体管理器时,它总是抛出异常 kotlin.UninitializedPropertyAccessException: lateinit property entityManager has not been initialized 按下面的代码 @Singleton clas

我使用picocli连接数据库并构建本机映像。我使用micronaut连接到postgres,在执行picocli原生构建的图像时获得一些数据。但我在使用entityManager时遇到了问题。当我使用@Inject使用实体管理器时,它总是抛出异常

kotlin.UninitializedPropertyAccessException: lateinit property entityManager has not been initialized
按下面的代码

@Singleton
class StudentRepository  {

    @Inject
    lateinit var entityManager: EntityManager


    @ReadOnly
    fun findAll(): List<Student?>? {
        var qlString = "SELECT * FROM Student as g"

        val query: TypedQuery<Student> = entityManager.createQuery(qlString, Student::class.java)
        return query.getResultList()
    }

}
我的申请

@picocli.CommandLine.Command(
    name = "cli",
    description = ["Cli"],
    version = ["Cli"],
    mixinStandardHelpOptions = true,
    subcommands = [StudentService::class]
)
class MyApplication : Runnable {

    override fun run() {
        println("Begin start")
    }
}

fun main(args: Array<String>) {
    PicocliRunner.run(MyApplication::class.java, *args)
}
@picocli.CommandLine.Command(
name=“cli”,
description=[“Cli”],
版本=[“Cli”],
mixInstandardHelpions=true,
子命令=[StudentService::class]
)
类MyApplication:Runnable{
覆盖趣味跑(){
println(“开始”)
}
}
趣味主线(args:Array){
运行(MyApplication::class.java,*args)
}
但如果我使用http客户端,它就可以工作了。
我不知道为什么不能使用entityManager。如何使用picocli连接db

你能让EntityManager注入在没有picocli的简单程序中工作吗?也许是在JUnit测试中?只是为了确认picocli确实是问题的原因,甚至与问题有关。当我检查一些情况时,如果在主函数中,我删除了PicocliRunner。运行(MyApplication::class.java,*args)并将其更改为命令行命令行(MyApplication())。当我基于它注入时执行(*args)无效。我认为这取决于皮科利伦。PicocliRunner构建所有依赖项并将其注入。但我不知道为什么HttpClient会工作,但有些情况下,比如:crudepository或entityManager不工作不,这不是我的意思。如果用CommandLine.execute替换PicocliRunner,则将删除Micronaut,而不是picocli。我想尝试相反的方法:你能制作一个简单的Micronaut应用程序(没有picocli)来成功注入EntityManager吗?现在它可以工作了吗?所以我有个问题你可以帮我
@picocli.CommandLine.Command(
    name = "cli",
    description = ["Cli"],
    version = ["Cli"],
    mixinStandardHelpOptions = true,
    subcommands = [StudentService::class]
)
class MyApplication : Runnable {

    override fun run() {
        println("Begin start")
    }
}

fun main(args: Array<String>) {
    PicocliRunner.run(MyApplication::class.java, *args)
}