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;
}
你问答案。
- 您只需在视图中定义类型 LocalDate。
- 您必须编写 Spring 转换器来获取地图。您可以获得
List<MyView>
而不是 Map
我刚找到一个可行的解决方案。
我只是添加到 现有 @Repository
:
@Query(value = "select COMPLETED_DATE from COMPLETION_DATES where ID = ?1", nativeQuery = true)
LocalDate getCompletedDateById(Long id);
我之前定义了一个 LocalDateConverter
,它有 @Converter(autoApply = true
) 注释,它似乎已经为我处理了转换(它很管用)。
我对 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;
}
你问答案。
- 您只需在视图中定义类型 LocalDate。
- 您必须编写 Spring 转换器来获取地图。您可以获得
List<MyView>
而不是 Map
我刚找到一个可行的解决方案。
我只是添加到 现有 @Repository
:
@Query(value = "select COMPLETED_DATE from COMPLETION_DATES where ID = ?1", nativeQuery = true)
LocalDate getCompletedDateById(Long id);
我之前定义了一个 LocalDateConverter
,它有 @Converter(autoApply = true
) 注释,它似乎已经为我处理了转换(它很管用)。