嗨,我正在尝试在我的REST-API中构建一个复杂的搜索端点。我有多重参数,并且喜欢以复杂的方式编写它们。这些是我的参数:
@Param(value = "applicationId") String applicationId,
@Param(value = "mdName01") String mdName01,
@Param(value = "mdName02") String mdName02,
@Param(value = "mdName03") String mdName03,
@Param(value = "mdName04") String mdName04,
我喜欢做的是这样的:
findAllBy: applicationID AND (mdName1 OR mdName2 OR MdName3 OR MdName4)
因为找不到()
的内容,我将声明更改为:
findAllBy: applicaionID AND mdName1 OR applicaionID AND mdName2 OR applicaionID AND mdName3 [...]
这是我的方法现在的外观:
Page<vwFact> findAllByApplicationIdAndMdName01StartingWithOrApplicationIdAndMdName02StartingWithOrApplicationIdAndMdName03StartingWithOrApplicationIdAndMdName04StartingWith (
@Param(value = "applicationId") String applicationId,
@Param(value = "mdName01") String mdName01,
@Param(value = "mdName02") String mdName02,
@Param(value = "mdName03") String mdName03,
@Param(value = "mdName04") String mdName04,
Pageable pageable
);
现在,当我运行请求时,出现以下错误:java.util.NoSuchElementException
,因此看起来我已经习惯了很少的参数。
那么,有没有一个简单的解决方案?或者说我通常是如何实现这种复杂的搜索查询的?
答案 0 :(得分:1)
您可以使用@Query进行复杂的查询,这非常容易使用。
使用@Query,您的代码将看起来像下面的代码段。
@Query(SELECT v FROM vwFact v WHERE v.applicationId = :applicationId and v.mdName01 = :mdName01)
Page<vwFact> findAllByApplicationIdAndMdName01StartingWithOrApplicationIdAndMdName02StartingWithOrApplicationIdAndMdName03StartingWithOrApplicationIdAndMdName04StartingWith (
@Param(value = "applicationId") String applicationId,
@Param(value = "mdName01") String mdName01,
@Param(value = "mdName02") String mdName02,
@Param(value = "mdName03") String mdName03,
@Param(value = "mdName04") String mdName04,
Pageable pageable
);
这是一个不错的tutorial开头。