#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:
-
используйте getter / setter в вашем классе POJO
-
вам не нужно писать запрос для извлечения всей записи. Просто вы можете использовать метод findAll(), который доступен в crudeRepository .
bicycleRepository.findAll();
(вернет список вашего класса POJO.)
- убедитесь, что в таблице присутствуют данные. если нет, то используйте Сеттер / конструкцию
Инъекция для заполнения данных. ИЛИ вы можете выполнить вызов 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) только добавляет мне сеттеры