Spring Data查询参数中的Validate集合不为空

时间:2016-04-17 09:26:01

标签: java spring validation spring-data spring-data-jpa

假设我有一个带查询方法的Spring Data存储库

public interface SomeRepository extends JpaRepository<Something, Long> {

    @Query("select s from Something s where s.val in :values")
    List<Something> findSomethingsByValIn(@Param("values") Collection<Long> values);
}

当传递的值集合为空时,我有

SQL Error: 1064, SQL State: 42000
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '))' at line 1

因为像

这样的东西
Hibernate: select something0_ as col_0_0_ from Something something0_ where something0_.val in ())

当然,我可以在方法调用之前轻松检查传递的参数。我甚至可以在javadoc中描述它。但是有可能在查询方法中验证参数吗?

1 个答案:

答案 0 :(得分:1)

我认为事先检查集合的空虚是要走的路,因为在这种特殊情况下甚至不需要执行数据库查询。

我想有人可能会争辩说,对于传递给查询的空集合,MariaDB可能不那么挑剔,但我猜他们认为这是一个应用程序级错误。你可以在这里找到关于故事双方的论据。

也就是说,如果要检查方法中的参数,则必须采用reference documentation中描述的自定义实现方法。