将当前日期注入Sping Boot JPA存储库的本地查询

cdmah0mi  于 7个月前  发布在  Spring
关注(0)|答案(1)|浏览(77)

我们在Sping Boot 3应用程序(Kotlin)的JPA存储库中有以下方法:

@Query(
    """SELECT *
        FROM task as t
        WHERE 
        t.end_date IS NULL 
             OR t.end_date >= CAST(NOW() AS DATE)
    """, nativeQuery = true
)
fun findAllCurrentAndFuture(): List<Task>

字符串
但是对NOW()的引用使得测试变得困难,例如,我读到我们可以定义一个时钟bean,但是不知道这种方法是否可以在这里使用。
我们在这里能做些什么来实现我们可以在固定的时刻进行测试?
目前,我们正在使用@DataJpaTest来测试该存储库中的其他方法,因此我们希望有一个与该方法兼容的解决方案。

np8igboo

np8igboo1#

我认为查询应该使用动态参数:

@Query(
    """SELECT *
        FROM task as t
        WHERE 
        t.end_date IS NULL 
             OR t.end_date >= CAST(:currentTime AS DATE)
    """, nativeQuery = true
)
fun findAllCurrentAndFuture(@Param("currentTime" LocalDateTime now): List<Task>

字符串
在测试用例中,您将使用下一个参数调用存储库方法

findAllCurrentAndFuture(LocalDateTime.now())


像这样的东西就足够了。

相关问题