我需要根据可选参数获取记录。
Ex Database: MySql
Tables:
Hotel-> hotel_id, name, group_id, status, brand_id, no_rooms, region_id
Region -> region_id, region_name, region_code, region_manager
地区到酒店有一对多的关系。
我可以使用此类查询来获取酒店记录
Select * from MyDB.Hotel h where h.group_id = 2 and h.brand_id = "ABC" and h.status = "Available" and h.region_id in (select region_id from MyDB.Region r where r.region_code = "13" and r.region_name = "ABC");
类似地,我创建了一个api端点,通过将group_id,brand_id,status,region_code,region_name作为必需参数传递来获取酒店详细信息,并且能够获取记录。
我正在使用Spring CRUD存储库。
@Query(value="from Hotel h where (h.group =:group) and (h.brand = :brand) and (h.status = :status) and h.region in (from Region r where (r.regionCode =:regionCode) and (r.regionName =:regionName))")
Page<Hotels> findAllHotels (@Param("group") Group group,
@Param("brand") Brand brand,
@Param("status") String status,
@Param("regionCode") EnumProductGroup regionCode,
@Param("regionName") EnumProductType regionName,
Pageable pageable);
现在我需要将请求发送到与可选参数相同的端点。
如果缺少一个参数,仍需要根据其他参数获取记录。意味着缺少的参数应该从动态的地方删除。
我尝试将动态查询字符串传递给存储库查询@Query但是失败了。我不知道这是否可能。
request-&gt; controller-&gt; service-&gt; repository扩展了CrudRepository。
是否有基于可用参数生成动态查询,或者是否存在与我正在尝试的不同的其他方面。