【问题标题】:PropertyReferenceException No property id found for type UserRegistrationPropertyReferenceException 找不到类型 UserRegistration 的属性 ID
【发布时间】:2021-08-14 08:26:23
【问题描述】:

我尝试了我网站上的所有内容,但无法解决此问题 过去 4 天。

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property id found for type UserRegistration!

我在我的应用程序中使用了jpa和springboot,但我不知道为什么面对 这类问题

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property id found for type UserRegistration!
    at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:90) ~[spring-data-commons-2.5.1.jar:2.5.1]
    at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:437) ~[spring-data-commons-2.5.1.jar:2.5.1]
    at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:413) ~[spring-data-commons-2.5.1.jar:2.5.1]
    at org.springframework.data.mapping.PropertyPath.lambda$from$0(PropertyPath.java:366) ~[spring-data-commons-2.5.1.jar:2.5.1]
    at java.base/java.util.concurrent.ConcurrentMap.computeIfAbsent(ConcurrentMap.java:330) ~[na:na]
    at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:348) ~[spring-data-commons-2.5.1.jar:2.5.1]
    at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:331) ~[spring-data-commons-2.5.1.jar:2.5.1]
    at org.springframework.data.repository.query.parser.Part.<init>(Part.java:81) ~[spring-data-commons-2.5.1.jar:2.5.1]
    at org.springframework.data.repository.query.parser.PartTree$OrPart.lambda$new$0(PartTree.java:249) ~[spring-data-commons-2.5.1.jar:2.5.1]
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na]
    at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) ~[na:na]
    at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
    at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na]
    at org.springframework.data.repository.query.parser.PartTree$OrPart.<init>(PartTree.java:250) ~[spring-data-commons-2.5.1.jar:2.5.1]
    at org.springframework.data.repository.query.parser.PartTree$Predicate.lambda$new$0(PartTree.java:383) ~[spring-data-commons-2.5.1.jar:2.5.1]
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na]
    at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) ~[na:na]
    at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
    at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na]
    at org.springframework.data.repository.query.parser.PartTree$Predicate.<init>(PartTree.java:384) ~[spring-data-commons-2.5.1.jar:2.5.1]
    at org.springframework.data.repository.query.parser.PartTree.<init>(PartTree.java:95) ~[spring-data-commons-2.5.1.jar:2.5.1]
    at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:89) ~[spring-data-jpa-2.5.1.jar:2.5.1]
    ... 70 common frames omitted

我在我的存储库文件中使用自定义查询 用户注册.kt

package com.userservice.userregistration.entity

import javax.persistence.Entity
import javax.persistence.GeneratedValue
import javax.persistence.GenerationType
import javax.persistence.Id

@Entity
data class UserRegistration(

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    val userId:Long=-1,
    val firstName:String="",
    val lastName:String="",
    val email:String="",
    val departmentId:Long=-1,
)

UserRegistrationRepository.kt

 package com.userservice.userregistration.repository
        
        import com.userservice.userregistration.entity.UserRegistration
        import org.springframework.data.jpa.repository.JpaRepository
        import org.springframework.stereotype.Repository
        
        @Repository
        interface UserRegistrationRepository : JpaRepository<UserRegistration,Long> {
             fun findUserById(userId: Long?): UserRegistration?
        }

UserRegistrationService.kt

    package com.userservice.userregistration.service
    
    import com.userservice.userregistration.VO.Department
    import com.userservice.userregistration.VO.ResponseTemplateVO
    import com.userservice.userregistration.entity.UserRegistration
    import com.userservice.userregistration.repository.UserRegistrationRepository
    import org.springframework.beans.factory.annotation.Autowired
    import org.springframework.stereotype.Service
    import org.springframework.web.client.RestTemplate
    
    
    @Service
    class UserRegistrationService {
    
        @Autowired
        private lateinit var userRegistrationRepository: UserRegistrationRepository
        @Autowired
        private lateinit var restTemplate: RestTemplate
    
        fun saveUserDetails(userRegistration: UserRegistration): UserRegistration {
             return userRegistrationRepository.save(userRegistration)
        }
    
        fun getUserWithDepartment(userId: Long): ResponseTemplateVO {
            val vo= ResponseTemplateVO()
            val userRegistration:UserRegistration? = userRegistrationRepository.findUserById(userId)
            val department: Department? =
                restTemplate.getForObject("http://localhost:9001/departments/"+ userRegistration?.departmentId,
                Department::class.java)
            vo.userRegistration=userRegistration
            if (department != null) {
                vo.department=department
            }
            return vo
    
        }
    }

UserRegistrationController.kt

package com.userservice.userregistration.controller

import com.userservice.userregistration.VO.ResponseTemplateVO
import com.userservice.userregistration.entity.UserRegistration
import com.userservice.userregistration.service.UserRegistrationService
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.web.bind.annotation.*

@RestController
@RequestMapping("/users")
class UserRegistrationController {
    @Autowired
    private lateinit var userRegistrationService: UserRegistrationService
     @PostMapping("/")
    fun saveUserDetails(@ModelAttribute userRegistration:UserRegistration):UserRegistration{
         return userRegistrationService.saveUserDetails(userRegistration)
    }
    @GetMapping("/{id}")
    fun getUserWithDepartment(@PathVariable("id") userId:Long):ResponseTemplateVO{
        return userRegistrationService.getUserWithDepartment(userId)
    }
}

如果我不在我的存储库上使用自定义查询,它会显示另一个问题 “必需的 UserRegistration 发现可选”在我的 userRegistrationService 类

【问题讨论】:

  • 错误告诉你到底哪里出了问题。您的 User 没有名为 id 的属性,但在名为 userId 上却有。只需使用普通的findById 并处理Optional (使用something like orElseThrow(() -> new IllegalStateException("No user found")l`,如果找不到用户则会抛出异常,否则它将返回记录。

标签: spring-boot kotlin jpa


【解决方案1】:

您不必声明单独的查询方法以通过ID查找,您只需为您的id属性添加@Column注解即可。

@Id
@Column("user_id") // or whatever it's called in the SQL table
@GeneratedValue(strategy = GenerationType.AUTO)
val userId:Long=-1

然后使用继承自 JpaRepository 的标准方法 (Optional&lt;T&gt; findById(ID id);)

val userRegistration:UserRegistration? = 
           userRegistrationRepository.findById(userId).orElse(null)

【讨论】:

    【解决方案2】:

    只是改变

        @Repository
        interface UserRegistrationRepository : JpaRepository<UserRegistration,Long> {
             fun findUserById(userId: Long?): UserRegistration?
        }
    

    进入

        @Repository
        interface UserRegistrationRepository : JpaRepository<UserRegistration,Long> {
             fun findUserByUserId(userId: Long?): UserRegistration?
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-02
      • 2019-11-05
      • 1970-01-01
      • 2016-09-01
      • 2017-12-16
      • 2019-05-21
      • 2013-11-07
      • 1970-01-01
      相关资源
      最近更新 更多