web-dev-qa-db-ja.com

指定された名前の属性を見つけることができないSpring Data JPA

私はSpring Data JPA on Spring Bootと私はエラーを取得し続けた、私は問題が何であるかを理解することはできません:

このManagedType [com.example.h2demo.domain.Subscriber]で指定された名前[firstName]の属性を見つけることができません

FirstNameは、エンティティクラスで宣言されています。以前に別のプロジェクトでDAOでサービスクラスを使用し、完全に機能しました。

My Entityクラス(ゲッターとセッターもクラスにあります):

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

}
8
smned

private String FirstName,LastName,Email;private String firstName,lastName,email;に変更してみてください

動作するはずです。

findByFirstNameSubscriberRepositoryは、存在しない慣例によりフィールドfirstNameを見つけようとします。

10
harsh

specification に従って、プロパティ名は小文字で始める必要があります。

...解決アルゴリズムは、パーツ全体(AddressZipCode)をプロパティとして解釈することから始まり、その名前(大文字ではない)のプロパティのドメインクラスをチェックします。

大文字ではない名前のプロパティを見つけようとします。したがって、firstNameなどの代わりにFristNameなどを使用します。

2
JPS

同じ問題は、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)
}
1
S.Dayneko

_entity class_変数を大文字から小文字に変更した後、たとえばUsernameからusernameにメソッドUsers findByUsername(String username);が機能します。

0
Osama Al-Banna