2016-11-14 53 views
1

我不是那麼喜歡Hibernate和Spring Data JPA,我有以下疑問。如何設置Spring Data JPA查詢方法必須是一個始終設置爲true的參數值?

我有正確地執行查詢此方法簽名:

@Repository 
public interface AccomodationMediaDAO extends JpaRepository<AccomodationMedia, Long> { 

    AccomodationMedia findByIdAccomodationAndIsMaster(Long accomodationId, boolean isMaster); 

} 

它發現(由AccomodationMedia實體類映射表),其具有命名爲idAccomodation設置好的與場的單個記錄值代表accomodationId方法參數和字段isMaster重新由isMaster布爾值。

它工作正常,但我的「問題」是這樣做我總是明確地通過布爾isMaster參數的值。

這個參數總是被設置爲true,所以我想以這種方式來改變以往的方法簽名:

AccomodationMedia findByIdAccomodationAndIsMaster(Long accomodationId, true); 

但的IntelliJ顯示錯誤:標識符或類型預期

爲什麼?我可以設置該參數的值必須明確設置爲true布爾值嗎?

+1

因爲它不是Java的語法。 – radoh

回答

5

正如reference documentation描述,你可以只使用IsTrue關鍵字:

AccomodationMedia findByIdAccomodationAndIsMasterIsTrue(Long accomodationId); 
+0

我認爲這是一個更簡潔的解決方案,tnx :-) – AndreaNobili

+0

好啊,我有點錯過了,這是一個jpa問題 – radoh

+0

這應該適用於所有Spring數據存儲庫,而不僅限於JPA。 –

1

如果您使用的是Java 8中,您可以用default實現重載它:

public interface AccomodationMediaDAO extends JpaRepository<AccomodationMedia, Long> { 

    AccomodationMedia findByIdAccomodationAndIsMaster(Long accomodationId, boolean isMaster); 

    default AccomodationMedia findByIdAccomodationAndIsMaster(Long accomodationId) { 
     return findByIdAccomodationAndIsMaster(accomodationId, true); 
    } 
} 

但你不能提供一個默認值的方法參數。例如。見this question

0

您無法將默認值設置爲方法簽名定義,您需要必須告訴Spring,它明確是您的參數值。在這種情況下,如果要避免在存儲庫實現中將「isMaster」設置爲true,則可以使用不同的方法。您可以使用@Query註釋來定義您自己的HQL查詢並在查詢字符串中提供默認值,只要您想使用命名查詢創建自己的自定義存儲庫方法,而不是使用Spring提供的命名方法定義,就可以使用此方法數據架構。

在您的特定情況下,你可以嘗試這樣的事:

@Repository 
public interface AccomodationMediaDAO extends JpaRepository<AccomodationMedia, Long> { 

    @Query("SELECT a FROM AccomodationMedia a WHERE a.accomodationId = :accomodationId AND a.isMaster = true") 
    AccomodationMedia findByIdAccomodationAndIsMaster(@Param(value = "accomodationId") Long accomodationId); 

} 

請注意,點號(a.accomodationId)名稱映射後的屬性必須申報到您的實體POJO實體本地列名匹配,這意味着「accomodationId」必須與表示您的ID列的變量的名稱相同,適用於「isMaster」屬性。

相關問題