簡體   English   中英

從 Spring 數據 JPA 查詢方法返回自定義集合

[英]Return custom collection from Spring Data JPA query method

我希望我的自定義查詢方法返回特定的 Guava 集合類型(在我的示例中為ImmutableSet )。

例子:

public interface MyRepository extends CrudRepository<User,UserId> {

  @Query("SELECT DISTINCT u FROM User u WHERE... ORDER BY ...")
  ImmutableSet<User> findByxxxx();

}

當我嘗試時,我得到:

Failed to convert from type [java.util.ArrayList<?>] to type [com.google.common.collect.ImmutableSet<?>]
...
Caused by: java.lang.IllegalArgumentException: Could not instantiate Collection type: com.google.common.collect.ImmutableSet

文檔沒有明確列出 Guava 集合類型,所以我不確定如果沒有新版本是不可能的,或者是否有一些配置可以使它工作。

如何指示 Spring 數據 JPA 使用該類型?

Spring 數據不支持來自任何第三方庫的 collections 並且可能永遠不會支持...

CrudRepository向您公開一個Iterable ,如果您想實現自定義集合,則由您來做。

順便說一句,如果您希望您的存儲庫返回自定義集合類型,您可以使用您的來裝飾 spring 數據存儲庫。 像這樣

interface JpaUserRepository extends CrudRepository<User,UserId> {

  @Query("SELECT DISTINCT u FROM User u WHERE... ORDER BY ...")
  Iterable<User> findByxxxx();

}
public class MyRepository {

   private final JpaUserRepository jpaUserRepository;

   @Autowired
   public MyRepository(final JpaUserRepository jpaUserRepository) {
     this.jpaUserRepository = jpaUserRepository;
   } 

   public ImmutableSet<User> findByxxxx() {
     return ImmutableSet.copyOf(jpaUserRepository.findByXXX());
   }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM