Не удалось найти атрибут с заданным именем [aNumber] в этом ManagedType [com.company.domain.Statistics]

#java #jpa #spring5

#java #jpa #spring5

Вопрос:

Я только что обновил свой проект до spring5, что вызывает приведенную ниже ошибку для кода, который отлично работал с более ранней версией spring.

Проблема в том, что JPA должен сопоставить aNumber с aNumber, но он не делает этого, принимая aNumber как aNumber, а не aNumber, что вызывает эту проблему.

Я вижу один поток для spring team, но не вижу разрешения здесь: https://github.com/spring-projects/spring-data-jpa/issues/1247

Я пытался искать везде, но не нашел ничего полезного.

Класс домена:

 @Data
@Entity
public class Statistics {

    @Id
    private Long id;

    private String aNumber;
    private Integer dispositionCode;

    @CreatedDate
    private OffsetDateTime created;

}
 

метод в интерфейсе репозитория:

 Optional<Statistics> findFirstByIdAndANumberAndDispositionCodeInOrderByCreatedDesc(Long id, String aNumber, Integer... dispositionCode);
 

Примечание: я знаю, что id может возвращать уникальный результат, просто чтобы сделать точный пример, который я внес в это изменение.

Ответ №1:

Я столкнулся с этой проблемой после обновления версии JPA, в котором указано, что все имена были правильными и отображались идеально.

Решение, которое я нашел, заключалось в определении собственного запроса в аннотации @Query JPA spring data, поскольку проблема возникала, когда JPA пытался создать именованный запрос JPA.

 @Query(nativeQuery = true, value = "Your Query here")
Optional<Statistics> findFirstByIdAndANumberAndDispositionCodeInOrderByCreatedDesc(Long id, String aNumber, Integer... dispositionCode);
 

Возможно, это не лучшее решение, но в моем случае я не должен был менять версию, поскольку она исходила от родительского POM, и это было самое простое решение, которое я мог сделать.