Spring Data JPA 无法找到具有给定名称的属性

新手上路,请多包涵

我试图在 Spring Data JPA Spring Boot 并且我一直收到错误,我无法弄清楚问题是什么:

无法在此 ManagedType [com.example.h2demo.domain.Subscriber] 上找到具有给定名称 [firstName] 的属性

FirstName 在我的实体类中声明。我之前在不同的项目中使用过 DAO 的服务类并且工作得很好。

我的实体类(getters 和 setters 也在类中):

         @Entity
        public class Subscriber {

        @Id @GeneratedValue
        private long id;
        private String FirstName,LastName,Email;

        public Subscriber(long id, String firstName, String lastName, String email) {
            this.id = id;
            this.FirstName = firstName;
            this.LastName = lastName;
            this.Email = email;
          }
        }
...

我的存储库类

@Component
public interface SubscriberRepository extends JpaRepository<Subscriber,Long> {
    Subscriber findByFirstName(String FirstName);
    Subscriber deleteAllByFirstName(String FirstName);
}

我的服务等级

@Service
public class SubscriberService {

    @Autowired
    private SubscriberRepository subscriberRepository;

    public Subscriber findByFirstName(String name){
        return  subscriberRepository.findByFirstName(name);

    }

    public Subscriber deleteAllByFirstName(String name){
        return  subscriberRepository.deleteAllByFirstName(name);

    }

    public void addSubscriber(Subscriber student) {
        subscriberRepository.save(student);
    }
}

和我的控制器类:

 @RestController
@RequestMapping("/subscribers")
public class SubscriberController {

    @Autowired
    private SubscriberService subscriberService;

    @GetMapping(value = "/{name}")
    public Subscriber findByFirstName(@PathVariable("name") String fname){
        return  subscriberService.findByFirstName(fname);
    }

    @PostMapping( value = "/add")
    public String insertStudent(@RequestBody final Subscriber subscriber){
        subscriberService.addSubscriber(subscriber);
        return "Done";
    }

}

原文由 smned 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 560
2 个回答

同样的问题是当我处理 Spring Data Specifications ( https://www.baeldung.com/rest-api-search-language-spring-data-specifications )

最初的一段代码是:

 private Specification<Project> checkCriteriaByProjectNumberLike(projectNumber: String) {
    (root, query, criteriaBuilder) -> criteriaBuilder.like(root.get("project_number"), "%" + projectNumber)
}

问题出在 root.get(“project_number”) 中。在方法内部,我必须将字段名称放在模型中 (projectNumber),但我发送的字段名称与数据库中的字段名称 (project_number) 相同。

也就是说,最终正确的决定是:

 private Specification<Project> checkCriteriaByProjectNumberLike(projectNumber: String) {
    (root, query, criteriaBuilder) -> criteriaBuilder.like(root.get("projectNumber"), "%" + projectNumber)
}

原文由 S.Daineko 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题