2015-09-21 75 views
0

春JpaRepository可以生成從接口方法的名稱的SQL查詢:春天JPA方法名驗證

@Repository 
@Transactional 
public interface SomeEntityRepository extends JpaRepository<SomeEntity, Long> { 
    List<SomeEntity> findAllByEntityId(Long id); 
    List<SomeEntity> findAllByEntityIdAndDateOfCreationBetweenAnd/*...*/(Long id, /*...*/); 
} 

正如你所看到的 - 它可以是複雜的。因此,方法名稱可能不正確,並且會發生編譯器錯誤。

問:

是否可以查看/在實際項目中使用它(這需要一定的編譯時間,試驗和錯誤)之前驗證方法的名字嗎?

或者也許有可能在使用前將這種方法名稱轉換爲SQL - 以查看此方法名稱是否有效,以及它是否可以執行所有操作?

當然,顯而易見的方法是隻做小測試項目。但我覺得它一定是更好的方法。

感謝您的任何建議。

+1

Spring並驗證該方法正確翻譯** JPQL **。所以查詢應該總是在語法上是正確的。但這並不意味着它會做你期望的事情。這就是爲什麼你應該寫自動化測試。此外,它不是會發生的*編譯器*錯誤,而是* runtime *錯誤。 –

回答

0

您可以使用測試數據庫和Spring測試運行器編寫測試。有多種方法可以做到這一點,所以我只給一個草圖讓你開始:

  • 不是您的真實數據源的Spring bean的,使用的內存(如H2創建一個測試數據源的bean。 )數據庫
  • 創建Spring的測試範圍內,即會:
  • 使用@RunWith(SpringJUnit4ClassRunner.class)使用JUnit運行測試。
  • 使用@ContextConfiguration指向您的測試Spring上下文
  • 使用@Transactional,使測試的事務,並在測試方法進行任何更改回滾自動
  • @AutowireEntityManager和Spring數據倉庫和測試使用。

查看Spring文檔Integration Testing

0

有點晚了這一點,但是....

如果你想測試方法的名稱,而不編譯接口,你可以找到一個名爲PartTreeorg.springframework.data類。 repository.query.parser in spring-data-commons:1.12.6 jar。

新PartTree(stringVersionOfMethodName,classOfEntityRepoIsFor)

它會拋出一個異常,如果它不能正確解析名稱。

Maven的我使用1.4.3.RELEASE的彈簧引導起動父母和包括彈簧引導起動數據JPA depedency