Собственный запрос, где параметр LIKE - нет результата - PullRequest
0 голосов
/ 05 июля 2018

У меня есть рабочий SQL-запрос в Workbench:

SELECT tmi.* FROM tree_menu_item tmi WHERE (tmi.altname='FC' OR tmi.title='FC') AND 
(tmi.parent_title LIKE '%FC_parent%' OR 
tmi.parent_title LIKE concat(IFNULL((select parent_title from tree_menu_item where altname='FC_parent'),'xxx'),'%'))

Но не могу заставить его работать в JpaRepository:

public interface TreeMenuItemRepository extends JpaRepository<TreeMenuItem, Long> {
    @Query(value = "SELECT tmi.* FROM tree_menu_item tmi WHERE (tmi.altname=:title OR tmi.title=:title) AND (tmi.parent_title LIKE %:parent% "
        + "OR tmi.parent_title LIKE concat(IFNULL((SELECT parent_title FROM tree_menu_item WHERE altname=:parent),'xxx'),'%'))", nativeQuery = true)
    TreeMenuItem findOneByParentTitle(@Param("parent") String parent, @Param("title") String title);
}

Когда я включил ведение журнала запросов в MySql, я вижу, что условие LIKE не содержит % переноса. Обходной путь должен дублировать параметр :parent, чтобы он не использовался в состоянии LIKE с равным условием:

public interface TreeMenuItemRepository extends JpaRepository<TreeMenuItem, Long> {
  @Query(value = "SELECT tmi.* FROM tree_menu_item tmi WHERE (tmi.altname=:title OR tmi.title=:title) AND (tmi.parent_title LIKE %:parentLike% "
        + "OR tmi.parent_title LIKE concat(IFNULL((SELECT parent_title FROM tree_menu_item WHERE altname=:parentAlt),'xxx'),'%'))", nativeQuery = true)
  TreeMenuItem findOneByParentTitle(@Param("parentLike") String parentLike, @Param("parentAlt") String parentAlt, @Param("title") String title);
}

Это ошибка или функция? Есть ли другое решение? Это происходит в SpringBoot v2.0.2

...