我在Kotlin中使用Spring和库。当我向我的应用程序发送一个查询时,它会抛出以下内容:
2020-02-26 18:51:42.707 ERROR 2672 --- [nio-8080-exec-7] g.k.e.error.DefaultGraphQLErrorHandler : Error executing query Exception while fetching data (/createUser) : lateinit property userRepository has not been initialized
kotlin.UninitializedPropertyAccessException: lateinit property userRepository has not been initialized
at com.minerepo.minerepo.resolver.mutation.RootMutationResolver.createUser(RootMutationResolver.kt:16) ~[main/:na]这是我的解决方案:
@Component
class RootMutationResolver : GraphQLMutationResolver {
@Autowired
private lateinit var userRepository: UserRepository
fun createUser(user: UserInput): User = userRepository.save(User(
id = UUID.randomUUID().toString(),
email = user.email,
nick = user.nick
))
}这是一个实体:
@Entity
data class User(
@Id val id: String,
@NotNull @Email var email: String,
@NotBlank @Length(min=4, max=64) var nick: String
) : ProjectOwner // Table-per-class inheritance这是输入类型类:
data class UserInput(
var email: String,
var nick: String
)这是存储库:
@Repository
@Component
interface UserRepository : JpaRepository<User, String>这是主要的课程:
@SpringBootApplication
class MinerepoApplication {
@Bean
fun schema() : GraphQLSchema = SchemaParser.newParser()
.file("schema.graphqls")
.resolvers(RootQueryResolver(), RootMutationResolver())
.build()
.makeExecutableSchema()
}
fun main(args: Array<String>) {
runApplication<MinerepoApplication>(*args)
}发布于 2020-02-26 19:00:18
你能在UserRepository组件(而不是GraphQL组件)中自动定位吗?
我认为您错过了@EnableJpaRepositories类上的MinerepoApplication注释。示例:
@SpringBootApplication
@EnableJpaRepositories(basePackageClasses = [MinerepoApplication::class])
class MinerepoApplication {
@Bean
fun schema() : GraphQLSchema = SchemaParser.newParser()
.file("schema.graphqls")
.resolvers(RootQueryResolver(), RootMutationResolver())
.build()
.makeExecutableSchema()
}这将指示Spring扫描MinerepoApplication类包(和子包)以查找JPA存储库。
您不需要JPA存储库接口上的注释@Repository和@Component。此外,@Repository的工作方式类似于@Component。
我还想补充一点,当您在组件中注入必要的依赖项时,不应该在字段上使用@Autowired,而是应该通过构造函数注入它们。示例:
@Component
class RootMutationResolver(
private val userRepository: UserRepository
) : GraphQLMutationResolver {
fun createUser(user: UserInput): User = userRepository.save(User(
id = UUID.randomUUID().toString(),
email = user.email,
nick = user.nick
))
}https://stackoverflow.com/questions/60417938
复制相似问题