SpringBoot JPA Repository - при получении выбранных полей отображается ошибка «Столбец не найден» - PullRequest
1 голос
/ 08 апреля 2020

Я хочу извлекать выбранные столбцы , предпочтительно динамически.

Сейчас я указываю stati c столбцы - идентификатор, заголовок, описание.

Category. java

@Entity(name="Category")
@Table(name="categories")
public class Category {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private long id;
   private String slug;
   private String title;
   private String description;
   private String preview_image;
   private int isFeatured;

   /*  Getters, setters etc */
}

CategoryRepository. java

public interface CategoryRepository extends JpaRepository<Category, Long> {

    @Query(
        value = "SELECT id, title, description FROM categories", 
        nativeQuery = true
    )
    List<Category> findAll();
}

Это выдает ошибку:

Столбец is_featured не найден. Класс исключения: класс org.springframework.dao.InvalidDataAccessResourceUsageException Exception [не удалось выполнить запрос; SQL [ВЫБРАТЬ id, заголовок, описание ОТ категории]; Вложенным исключением является org.hibernate.exception.SQLGrammarException: не удалось выполнить запрос]

Есть идеи, как решить эту ошибку? Я думал об использовании другой модели вместо Категория , но позже мне нужно сделать поля динамическими c. Трудно создать класс модели, если я не знаю, какие поля возвращать.

Кроме того, есть ли способ сделать этот @Query код динамического c таким, чтобы он возвращал столбцы, упомянутые в параметре?

Любая помощь будет оценена. Заранее спасибо! :)

1 Ответ

0 голосов
/ 08 апреля 2020

Это из-за стратегии именования Spring и Hibernate. Он будет конвертировать camelCase в SNAKE_CASE по умолчанию. Так что в вашем случае это isFeatured -> is_featured.

Если вы не хотите менять стратегию именования, просто добавьте @Column("isFeatured") в вашу собственность. Это переопределит поведение этого свойства по умолчанию.

Здесь вы можете найти больше Spring Boot + JPA: аннотация имени столбца игнорируется

Относительно динамического c запроса. Вы должны посмотреть функции в документации Spring-data-jpa и около querydsl

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...