【问题标题】:Spring JPA Query of a single column result into a generic type?单列的Spring JPA查询结果为泛型类型?
【发布时间】:2019-03-15 16:26:42
【问题描述】:

我对 Spring-Boot 和 JPA 比较陌生。对于复杂/多列表的实体和存储库,我一直做得很好,但我认为我需要查询只有 2 列,键/索引(长)和日期。

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

额外问题:

1) 我想将 java.sql.Date 转换为 java.time.LocalDate。由于没有实体/列可以分配转换,是否可以在查询中进行这种转换?

2) 是否也可以定义返回Map<Long, LocalDate> 的查询?

【问题讨论】:

  • 我想我错过了我的观点——我正在寻找一种不需要定义新的@Entity@Repository 的解决方案。写十几行和几个新文件只是为了从视图中获取日期对我来说似乎很愚蠢。

标签: java spring-boot spring-data-jpa jpql


【解决方案1】:

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

我只是添加到一个现有的@Repository

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

我之前定义了一个带有@Converter(autoApply = true) 注释的LocalDateConverter,它似乎已经为我处理了转换(它只是工作)。

【讨论】:

    【解决方案2】:

    您可以使用注释@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 Converter 才能获取 Map。你可以得到 List&lt;MyView&gt; 而不是 Map

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-31
      • 2011-03-17
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      相关资源
      最近更新 更多