2015-09-21 32 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