Spring JPA 查询单列结果为泛型?

Spring JPA Query of a single column result into a generic type?

我对 Spring-Boot 和 JPA 比较陌生。我在 complex/multi-column 表的实体和存储库方面做得很好,但我认为我需要查询只有 2 列,key/index(长)和日期。

我希望能够向现有存储库添加一种方法,该方法可以根据键查询此日期,并且 return 单个 LocalDate 结果而不是 @Entity 结果。这能做到吗?

奖金问题:

1) 我想将 java.sql.Date 转换为 java.time.LocalDate。是否可以在查询中进行此转换,因为没有 Entity/Column 可将转换分配给?

2) 是否也可以定义一个 return 是 Map<Long, LocalDate> 的查询?

您可以使用注解@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();
}

您可以扩展通用视图存储库并指定视图 class。

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

定义视图class

 @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 转换器来获取地图。您可以获得 List<MyView>
  3. 而不是 Map

我刚找到一个可行的解决方案。

我只是添加到 现有 @Repository:

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

我之前定义了一个 LocalDateConverter,它有 @Converter(autoApply = true) 注释,它似乎已经为我处理了转换(它很管用)。