假设我有一个带查询方法的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中描述它。但是有可能在查询方法中验证参数吗?
答案 0 :(得分:1)
我认为事先检查集合的空虚是要走的路,因为在这种特殊情况下甚至不需要执行数据库查询。
我想有人可能会争辩说,对于传递给查询的空集合,MariaDB可能不那么挑剔,但我猜他们认为这是一个应用程序级错误。你可以在这里找到关于故事双方的论据。
也就是说,如果要检查方法中的参数,则必须采用reference documentation中描述的自定义实现方法。