Метод findbyid JPARepository возвращает ноль, даже если объект db существует (Hibernate) - PullRequest
0 голосов
/ 11 марта 2020

Вызов findById (id) возвращает значение null, хотя я на 100% уверен, что элемент существует в базе данных с таким же идентификатором.

Мой класс репозитория:

public interface ItemRepository extends Repository<Item, String>, JpaRepository<Item, String>

Мой основной класс:

 itemRepository.findById(input.getItemId()).get(); 

Обратите внимание, что этот вопрос может звучать похоже на Spring boot JPA без возврата существующего результата используя findById , но в его случае данные никогда не вернутся, независимо от того, сколько раз он вызывал findById. Для меня в моем отладчике, если я оцениваю строку, содержащую findById дважды, со второй попытки я получаю результат из базы данных.

  • Поскольку я могу в конечном итоге получить объект, это означает, что я указываю на правильную базу данных.
  • Я не использую @Cache в любом месте моей кодовой базы
  • Данные либо возвращаются в виде правильной записи в БД, либо в виде нулевого значения - никогда не отображаются как поврежденные / грязные данные
  • Я не использую операции @ Asyn c JPA

Буду признателен, если любой может указать мне правильное направление, как изолировать эту проблему. Или, если это известная ошибка JPA.

EDIT - изображение, показывающее результат одной и той же строки кода до и после нажатия кнопки «выполнить» дважды. Обратите внимание, что результат равен нулю в первый раз, и результат имеет реальное значение во второй раз.

On initial debug evaluation

И после нажатия оцените второй раз:

enter image description here

My application.properties:

spring.datasource.url=jdbc:mysql://127.0.0.1/myDb?useSSL=false
# Hibernate config
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
logging.level.org.hibernate.SQL=DEBUG
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
...