我有一个列表作为查询方法的参数,如下所示:
@Query(value = "SELECT n FROM Names n WHERE n.name IN (:names)"
public List<NameDTO> getNames(@Param("names") List<String> names);
问题在于,由于名称列表可以为空或为 null,因此该查询将不会执行。您可以添加一个守卫,在执行 IN 子句之前检查名称是否为空,但 hibernate 不会被这种方式欺骗。我尝试了很多替代方案,但似乎没有任何效果。 有人认识到这个问题并且可以采取什么措施吗?
您可以使用动态查询方法来优雅地处理空列表:
@Query(value = "SELECT n FROM Names n WHERE (:names IS NULL OR n.name IN (:names))")
public List<NameDTO> getNames(@Param("names") List<String> names);
或者您可以使用其他策略,例如在将名称列表传递给查询之前检查名称列表。