Проблемы с собственным запросом spring data JPA возвращает пустой массив JSON с пустыми объектами

#java #spring-boot #spring-data-jpa #nativequery

#java #spring-boot #spring-data-jpa #nativequery

Вопрос:

Я изучаю spring 5 MVC с запросами spring data JPA и sql

Я пытаюсь использовать собственный запрос в моем примере spring api restful, но когда я запускаю проект, мой метод возвращает пустой объект json.

Мой класс модели

 @Entity
@Table(name = "bicycle")
public class Bicycle
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    
    @Column(name="name")
    private String name;
    
    @Column(name="year")
    private int year;
}
  

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

 @Repository
public interface BicycleRepository extends CrudRepository<Bicycle, Long>
{
    @Query(value = "SELECT * from db_bicycles.bicycle", nativeQuery = true)
    public List<Bicycle> obtenerTodos();
}
  

Мой класс контроллера

 @RestController
@RequestMapping("/api")
public class BicycleController
{
    @Autowired
    private BicycleRepository bicycleRepository;
    
    //create get all bicycles
    @GetMapping("/bicycles")
    public List<Bicycle> getAllBicycles()
    {
        return bicycleRepository.obtenerTodos();
    }   
}
  

Мои свойства приложения

 spring.datasource.url=jdbc:mysql://localhost/db_bicycles?useUnicode=trueamp;useJDBCCompilantTimeZoneShift=trueamp;useLegacyDatetimeCode=falseamp;serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.show-sql=true
  

В этой таблице 2 строки.

введите описание изображения здесь

Комментарии:

1. Привет, что ты имел в виду под db_bicycles. Спасибо

2. В вашем классе Bicycle есть ли какой-либо способ получения и установки? Если нет, попробуйте добавить getter и setter и повторите попытку.

3. Да, по какой-то причине STS делают меня только сеттерами, а не геттерами, спасибо.

Ответ №1:

  1. используйте getter / setter в вашем классе POJO

  2. вам не нужно писать запрос для извлечения всей записи. Просто вы можете использовать метод findAll(), который доступен в crudeRepository .

bicycleRepository.findAll(); (вернет список вашего класса POJO.)

  1. убедитесь, что в таблице присутствуют данные. если нет, то используйте Сеттер / конструкцию

Инъекция для заполнения данных. ИЛИ вы можете выполнить вызов POST для заполнения данных в таблице с помощью метода save().

Комментарии:

1. Я не могу использовать гибернацию, как orm (отображение внешнего ключа и т.д.). Таблицы часто меняются, и собственный запрос помогает избежать сбоев, просто замените sql-запрос, и результат будет таким же, как у класса, который я создаю.

2. Не согласен, что вы поделились здесь a / c, который я объяснил. Если таблица часто меняется, у нас будет много подходов. В любом случае, вам решать, как вы будете работать со своим кодом

3. политика компании, компания заявляет, что должен быть sql с JPA и без spring JdbcTemplate

Ответ №2:

Если вы используете в своем проекте lombok и Spring Tools Suite, попробуйте запустить Maven Clean и Maven Install.

 mvn clean install
  

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

Ответ №3:

Решение состоит в том, чтобы добавить геттер и сеттеры, eclipse (STS) только добавляет мне сеттеры