You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot集成MongoDB出现No property existByUserName found for type User报错如何解决

问题原因

你在UserRepository中定义的判断存在的方法名不符合Spring Data的命名规范:
Spring Data 中判断实体是否存在的查询方法固定前缀为exists(末尾带s),你写的existByUserName、existByEmail少了末尾的s,Spring Data解析方法名时会误以为你要查询名为existByUserName的属性,自然就抛出No property existByUserName found for type User!的异常。

解决方案

  1. 修改UserRepository.kt里的两个方法名,把exist改为exists即可:
package com.nilmani.mychat.repository

import com.nilmani.mychat.model.User
import org.springframework.data.mongodb.repository.MongoRepository
import java.util.*

interface UserRepository : MongoRepository<User,String> {
    fun findByUserName(userName:String):Optional<User>
    // 修正前缀为exists
    fun existsByUserName(userName:String): Boolean
    fun existsByEmail(email:String): Boolean
}
  1. 同步修改UserService.kt里调用这两个方法的代码,同时补充原有缺失的异常抛出逻辑(原来仅打日志的话,controller的异常捕获不会生效):
fun register(user:User,role:Role):User{
    log.info("Regestering user {}",user.userName)
    if (userRepository.existsByUserName(user.userName)){
        log.warn("UserName already Exist", user.userName)
        throw UserNameAlreadyExistException("用户名已存在")
    }
    if(userRepository.existsByEmail(user.email)){
        log.warn("This email already Registred",user.email)
        throw EmailAlreadyExistException("邮箱已被注册")
    }
    user.active = true
    user.password = user.password
    user.role = setOf(role) // 这里原逻辑赋值为本身是无效的,改为传入的角色参数
    return userRepository.save(user)
}

内容的提问来源于stack exchange,提问作者Mama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:36:03