我有@Query
给我带来麻烦。即使给定的父级为空,我也希望获得具有给定父级的所有网页。
可以设置父级,但也可以不设置父级。
我一直在尝试这个:
@Query("SELECT w FROM Webpage w WHERE w.parent = :parent OR (parent IS NULL AND :parent.id < '1')) ORDER BY w.listOrder")
public Page<Webpage> findByParent(@Param("parent") Webpage parent, Pageable page);
而且:
@Query("SELECT w FROM Webpage w WHERE w.parent = :parent OR (parent IS NULL AND :parent IS NULL)) ORDER BY w.listOrder")
public Page<Webpage> findByParent(@Param("parent") Webpage parent, Pageable page);
但我得到了例外:
Caused by: java.lang.IllegalArgumentException: Validation failed for query for method public abstract
com.thalasoft.learnintouch.data.jpa.domain.Webpage
com.thalasoft.learnintouch.data.jpa.repository.WebpageRepository.findByParentAndNameAndNotGarbage(com.thalasoft.learnintouch.data.jpa.domain.Webpage,java.lang.String)!
我使用的是弹簧3.2.9.RELEASE和spring-data-jpa 1.6.1.RELEASE版本。
关于如何在给定父级上进行选择的任何想法,即使给定的父级为空?
亲切的问候,
Stephane Eybert
答案 0 :(得分:4)
如果提供程序上的验证不允许您传递空值,则可以将查询拆分为两个。您必须在呼叫者中设置逻辑以确定要呼叫哪一个。
Query1(param不为空):
@Query("SELECT w FROM Webpage w WHERE w.parent = :parent ORDER BY w.listOrder")
public Page<Webpage> findByParent(@Param("parent") Webpage parent, Pageable page);
Query2(param为null):
@Query("SELECT w FROM Webpage w WHERE w.parent is null ORDER BY w.listOrder")
public Page<Webpage> findByNullParent(Pageable page);
我建议您阅读提供商的更多文档,了解如何传递空值。