Spring JPA Запрос одного столбца приводит к универсальному типу? - PullRequest
0 голосов
/ 10 октября 2018

Я относительно новичок в Spring-Boot и JPA.Я неплохо справляюсь с сущностями и репозиториями для сложных / многостолбцовых таблиц, но у меня есть представление, что мне нужно запросить только два столбца: ключ / индекс (длинный) и дату.

Я хотел бы иметь возможность добавить метод в существующий репозиторий, который может запрашивать эту дату на основе ключа и возвращать один результат LocalDate, а не результат @Entity.Можно ли это сделать?

Бонусные вопросы:

1) Я хотел бы преобразовать java.sql.Date в java.time.LocalDate.Возможно ли иметь это преобразование в запросе, так как нет объекта / столбца, который бы назначил преобразование?

2) Можно ли также определить запрос, который возвращает Map<Long, LocalDate>?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Я только что нашел рабочее решение.

Я просто добавил к существующему @Repository:

@Query(value = "select COMPLETED_DATE from COMPLETION_DATES where ID = ?1", nativeQuery = true)
LocalDate getCompletedDateById(Long id);

Я ранее определил LocalDateConverter, которыйимел аннотацию @Converter(autoApply = true), которая, кажется, обработала преобразование для меня (это просто работает).

0 голосов
/ 10 октября 2018

Вы можете определить репозиторий с помощью аннотации @NoRepositoryBean.С помощью этой аннотации вы можете определить универсальное представление.

@NoRepositoryBean
public interface ViewRepository<T, ID extends Serializable> extends Repository<T, ID> {
   T findOne(ID id);
   boolean exists(ID id);
   Iterable<T> findAll();
   long count();
}

Вы можете расширить репозиторий универсального представления и указать класс представления.

public interface MyViewRepository extends ViewRepository<MyView, Long> {
}

Определить класс представления

 @Entity
 @Table(name = "my_view")
 public class MyView implements Serializable {
        private static final long serialVersionUID = 1L;
        private Long key;
        private LocalDate value;
 }

Вы задаете вопросы.

  1. Вы просто определяете тип LocalDate в своем представлении.
  2. Вы должны написать Spring Convertor для получения Map.Вместо карты вы можете получить List<MyView>
...