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

时间:2018-02-22 13:54:08

标签: java spring spring-data-jpa

我使用spring数据JPA。我需要在我的存储库请求中仅加载具体属性的集合 colors

TextBox

提供的解决方案正常运行。

我希望使用spring方法来简化它,以加载我使用的存储库对象的集合(repository @Query(value = "SELECT cd.color FROM CalendarDetails cd where cd.userCalendar.userId = :userId") List<String> findCalendarColorsByUserWithDuplicates(@Param("userId") Long userId); ):

public interface CalendarDetailsRepository extends JpaRepository<CalendarDetails, Long>

但我需要收集颜色!试图

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

我收集了List<String> findColorByUserCalendarUserId(Long userId);

是否有可能在弹簧数据加载颜色列表后改进我的上一次请求?

2 个答案:

答案 0 :(得分:2)

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

有很多方法可以 make it,但我建议如下。 您添加了一个接口,其中包含您需要从实体获取的属性的getter:

public interface ColorOnly {
    String getColor();
}

然后返回此界面'对象:

的列表
List<ColorOnly> findColorByUserCalendarUserId(Long userId);

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

答案 1 :(得分:-1)

尝试添加全部

findAllByUserCalendarUserId(Long userId);

BTW,IntelliJ IDEA提供了对JPA存储库的非常深入的支持,所以当你创建像这样的查询时它可以防止很多可能的问题