Как ссылаться на сущность в Query в CrudRepository в JDBC Spring Data? - PullRequest
0 голосов
/ 21 октября 2019

Я хочу получить сущность из базы данных с помощью Spring Data CrudRepository с помощью метода findWithTitle() следующим образом:

interface TasksCrudRepository extends CrudRepository<Task, Long> {

    @Query(value = "SELECT t FROM Task t WHERE t.title IS NOT NULL")
    List<Task> findWithTitle();
}

Но я получаю

org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "T" not found; SQL statement:
SELECT t FROM Task t [42122-199]

Я не могу найтипричина, почему это происходит. Из того, что я знаю, этот синтаксис должен работать как положено.

Вот как выглядит объект Task:

@Data
@Table("task")
@AllArgsConstructor
public class Task {
    @Id
    private Long id;
    private String title;
    private String description;
    private Set<Attachment> attachments;
    private Set<TagRef> tagRefs;
    @CreatedDate
    private LocalDateTime createdAt;
    @LastModifiedDate
    private LocalDateTime updatedAt;
}

И вот схема для него:

CREATE TABLE task
(
    id          IDENTITY,
    title       VARCHAR(100),
    description VARCHAR(1024),
    created_at  TIMESTAMP,
    updated_at  TIMESTAMP,
);

Ответы [ 3 ]

0 голосов
/ 21 октября 2019

Вместо пользовательского запроса используйте предопределенный Spring JPA метод.
Пожалуйста, попробуйте следующий подход.

interface TasksCrudRepository extends CrudRepository<Task, Long> {


    List<Task> findByTitleNotNull();
}

Изменения сделаны:

  • УдаленоАннотирование запроса
  • Переименован метод для соответствия стандартному стандартному сервису JPA
0 голосов
/ 21 октября 2019

Решение состоит в том, чтобы использовать звездочку в качестве упомянутого @deHaar:

@Query("SELECT * FROM Task t ...")
List<Task> findTasks();
}

Более того, если вы хотите выполнить запрос JOIN, также можно запустить и звездочку:

@Query("SELECT * FROM Task t JOIN Attachment a ON t.id = a.task")
List<Task> findWithAttachments();
0 голосов
/ 21 октября 2019

Может быть, это поможет вам, COLUMN_NOT_FOUND_1 = 42122 Ошибка с кодом 42122 возникает при ссылке на несуществующий столбец. Пример: CREATE TABLE TEST (ID INT);ВЫБЕРИТЕ ИМЯ ИЗ ТЕСТА;

...