programing

스프링 데이터 JPA가 지정된 이름의 속성을 찾을 수 없습니다.

testmans 2023. 3. 16. 21:14
반응형

스프링 데이터 JPA가 지정된 이름의 속성을 찾을 수 없습니다.

내가 쓰려고 했는데Spring Data JPASpring Boot에러가 계속 발생하고 있어, 무엇이 문제인지 알 수 없습니다.

이 Managed에서 지정된 이름 [firstName]의 속성을 찾을 수 없습니다.[ com . example ]를 입력합니다.h2domain.domain.서브스크라이버]

FirstName이 엔티티 클래스에서 선언되었습니다.이전에도 다른 프로젝트에서 DAO와 서비스 클래스를 사용한 적이 있으며, 완벽하게 작업했습니다.

My Entity 클래스(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);
    }
}

My Controller 클래스:

@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";
    }

}

변경해 보다private String FirstName,LastName,Email;로.private String firstName,lastName,email;

그건 작동할 거야.

findByFirstNameSubscriberRepository 필드를 찾으려 합니다.firstName없는 관습에 의해.

엔티티 내부의 속성이 https://docs.spring.io/spring-data/jpa/docs/current/reference/html/ #substitorys.substities.substities.substities-substities-substities-substities-recisions

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")에 있었습니다.메서드에 모델(project Number)과 같이 필드명을 넣어야 하는데, 데이터베이스(project_number)와 같이 필드명을 보냈습니다.

즉, 최종 올바른 결정은 다음과 같습니다.

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

옷 갈아입고 나서entity class대문자에서 작은 글자까지 변수Username로.username방법Users findByUsername(String username);지금 나를 위해 일하고 있다.

사양에 따라 속성 이름은 작은 대소문자로 시작해야 합니다.

...해결 알고리즘은 전체 부분(AddressZipCode)을 속성으로 해석하는 것으로 시작하여 도메인 클래스에서 해당 이름의 속성(캐피털라이즈되지 않음)을 확인합니다.

자본화되지 않은 이름의 부동산을 찾으려고 합니다.사용방법firstName대신FristName기타 등등.

언급URL : https://stackoverflow.com/questions/49319468/spring-data-jpa-unable-to-locate-attribute-with-the-given-name

반응형