【问题标题】:How to fix .UnsatisfiedDependencyException error in Spring?如何修复 Spring 中的 .UnsatisfiedDependencyException 错误?
【发布时间】:2021-12-01 04:13:30
【问题描述】:

我有以下代码:

package com.example.demo

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.data.jpa.repository.Query
import org.springframework.data.repository.CrudRepository
import org.springframework.stereotype.Repository
import org.springframework.stereotype.Service
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RestController
import javax.persistence.Entity
import javax.persistence.Id
import javax.persistence.Table

@SpringBootApplication
class DemoApplication

fun main(args: Array<String>) {
    runApplication<DemoApplication>(*args)
}


@RestController
class MessageResource(var service: MessageService) {

    @GetMapping
    fun index(): List<Message> = service.findMessagesInDB()

    @PostMapping
    fun post(@RequestBody message: Message) {
        service.addMessageToDB(message)
    }
}


@Service
class MessageService(val db : MessageRepository) {

    fun findMessagesInDB(): List<Message> = db.findMessages()

    fun addMessageToDB(message: Message){
        db.save(message)
    }
}

@Repository
interface MessageRepository : CrudRepository<Message, String> {
    @Query("select * from messages")
    fun findMessages(): List<Message>
}


@Table(name ="MESSAGES")
@Entity
data class Message(@Id val id: String?, val text: String)

我明白了

java.lang.IllegalArgumentException:查询方法 public abstract java.util.List com.example.demo.MessageRepository.findMessages() 验证失败!

我遵循了这个 kotlin-Spring 教程:https://kotlinlang.org/docs/jvm-spring-boot-restful.html#add-database-support

【问题讨论】:

  • 阅读完整的错误信息,您的问题是java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.example.demo.MessageRepository.findMessages()!。从这里开始。
  • 我厌倦了该功能,但没有成功。我试图删除查询如下@Repository interface MessageRepository : CrudRepository&lt;Message, String&gt; { fun findMessages() = findAll().toList() }

标签: spring-boot kotlin


【解决方案1】:

在我看来,您的@Query 中缺少nativeQuery = true 属性。请尝试以下操作:

@Repository
interface MessageRepository : CrudRepository<Message, String> {
    @Query(value = "select * from messages", nativeQuery = true)
    fun findMessages(): List<Message>
}

此外,这种自定义 @Query 方法似乎没有必要,因为 CrudRepository 有一个方法 (findAll()) 可以做到这一点。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-05-25
  • 2020-02-20
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 2020-10-19
相关资源
最近更新 更多