繁体   English   中英

如何指定 spring 数据 jpa 请求来加载实体属性的集合?

[英]How to specify spring data jpa request to load collection of entity properties?

我使用弹簧数据 JPA。 我需要在我的存储库请求中只加载具体属性颜色的集合:

@Query(value = "SELECT cd.color FROM CalendarDetails cd where cd.userCalendar.userId = :userId")
List<String> findCalendarColorsByUserWithDuplicates(@Param("userId") Long userId);

提供的解决方案正常工作。

我想使用 spring 方法来简化它来加载我将使用的存储库对象的集合(存储库public interface CalendarDetailsRepository extends JpaRepository<CalendarDetails, Long> ):

List<CalendarDetails> findByUserCalendarUserId(@Param("userId") Long userId);

但我需要收集颜色!

List<String> findColorByUserCalendarUserId(Long userId);

我得到了CalendarDetails集合

是否可以按照弹簧数据方法来改进我的最后一个请求来加载颜色列表?

您可以尝试 Spring Data 提供的特殊投影机制。 它不仅可以让您优化查询,还可以在不使用 @Query 的情况下使用纯 Java 进行查询。

有很多方法可以做到,但我会推荐以下方法。 您添加一个接口,其中包含您需要从实体中获取的属性的 getter:

public interface ColorOnly {
    String getColor();
}

然后返回此接口的对象列表:

List<ColorOnly> findColorByUserCalendarUserId(Long userId);

要使用界面中的颜色,您只需调用 getColor 方法。 您可以考虑使用 Java 8 流和映射转换来简化它。 顺便说一句,这个只会查询颜色。 Hibernate 生成的查询中不会包含其他字段。

尝试添加所有

findAllByUserCalendarUserId(Long userId);

顺便说一句,IntelliJ IDEA 为 JPA 存储库提供了非常深入的支持,因此当您创建这样的查询时,它可以防止很多可能的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM