2017-02-17 103 views
0

之前這是一個簡單的接口CrudRepositories - @Query過程查詢參數執行

public interface HPCrudRepository<T,ID extends Serializable>{ 

    @Query("<how to write query here") 
    public List getThis(String somevalue); 

} 
在上述例子中

,參數someValue不能直接傳遞給查詢。我將不得不做一些預處理(比如用逗號或管道符號分割)。

我如何預先處理的參數變量

+0

不認爲這是可能的。你必須編寫你的接口實現。 – Patrick

回答

0

不完全是你要找的,但你可以自定義behaviour添加到您的春數據倉庫解決方案。

首先創建一個單獨的接口

public interface HPCrudRepositoryCustom { 
    public void customMethod(); 
} 

然後提供確實的處理落實。你

public class HPCrudRepositoryImpl implements HPCrudRepositoryCustom { 

    @Autowired 
    HPCrudRepository hpCrudRepository; 

    public void customMethod(String somevalue) { 
     // process someValue 
     ... 
     hpCrudRepository.getThis(processedOutcome); 
    } 
} 

也可以檢查一些例子example1example2

+0

爲什麼我應該自動裝配hpCrudrepository – madhairsilence

+0

僅用於示例目的。您可以自動裝載實體管理器,並使用jpa api或者您使用默認操作。該示例已編輯。 – gkatzioura

2

我不認爲有您的需求的解決方案。但是如果你不想創建你自己的實現類,你可以直接在你的界面中進行預處理。

在Java 8中,添加了default關鍵字,該關鍵字能夠在接口方法內使用邏輯功能。

因此,您可以創建一個預處理方法,然後調用接口的正確查詢方法。

public interface UserRepository extends JpaRepository<User, Long>{ 

    @Query("Select u from User u where u.name = :s") 
    User findUserByName(@Param("s") String s); 

    default User findUserByNamePreprocessing(String s) { 
     //do you reprocessing stuff here.. 
     return this.findUserByName(s); 
    } 
} 

然後您可以決定是否需要直接調用查詢或使用預處理。

User user = repo.findUserByNamePreprocessing("Username"); 

我認爲它是一個很好的和簡單的解決方案,用於小型和簡單的預處理要求。如果它變得複雜,則創建一個實現類。

+0

看起來整潔,但不幸的是,我只與1.7工作。 – madhairsilence

+1

一個非常不錯的考試Java8 +1 @Patrick – ozgur