Кстати, это уже работает с решением на основе шаблонов jdbc, которое я написал. Это не я хочу сделать переписать, это идея технического лидера. Это вызывает у меня головную боль.
Давайте не будем вдаваться в дискуссию о том, почему это хорошая идея или нет, а о том, как заставить ее работать.
в моем репо
@Repository
интерфейс Foo ... расширяет JpaRepository
это работает:
@Query(value = "SELECT t.td, em.ct, j.dsc AS bs, ct.dsc AS ct_name, "
+ "t.tn, et.dsc, f.f_id, f.f_life, f.fl_name, em.f_note "
+ "FROM ext_master em join tax t on em.td = t.td "
+ "join bs j on j.bs = t.bs "
+ "join ex_type et on em.ex_type = et.ex_type "
+ "join ct ct on ct.ct = em.ct "
+ "left join ex_f ef on em.td = ef.td and em.ct = ef.ct "
+ "left join f f on ef.f_id = f.f_id "
+ "WHERE em.ct in ( 'CC' ) "
+ "AND t.state IN ('FF','AK','AL','GA')"
+ "ORDER BY bs, t.tn", nativeQuery = true)
List<Object> getExtensionsByCustTypeAndState(@Param("custTypes") String custTypes, @Param("states") String states);
это не возвращает пустой набор результатов
@Query(value = "SELECT t.td, em.ct, j.dsc AS bs, ct.dsc AS ct_name, "
+ "t.tn, et.dsc, f.f_id, f.f_life, f.fl_name, em.f_note "
+ "FROM extension_master em join tax t on em.td = t.td "
+ "join bs j on j.bs = t.bs "
+ "join exemption_type et on em.ex_type = et.ex_type "
+ "join ct ct on ct.ct = em.ct "
+ "left join ex_f ef on em.td = ef.td and em.ct = ef.ct "
+ "left join f f on ef.f_id = f.f_id "
+ "WHERE em.ct in ( :custTypes ) "
+ "AND t.state IN ('FF', :states)"
+ "ORDER BY bs, t.tn", nativeQuery = true)
List<Object> getExByCustTypeAndState(@Param("custTypes") String custTypes, @Param("states") String states);
оба могут иметь одно или несколько значений, я пытался:
с двумя параметрами, такими как {: states}: # {# states}
со значением внутри параметра
в окружении "или"
передача всей строки в параметре, например "AND t.state IN ('FF', 'AK', 'AL', 'GA')"
передавая 'FF', 'AK', 'AL', 'GA' в параметре состояний и подставляя в запросе
+ "AND t.state IN (: states)"
Я написал простой запрос, чтобы убедиться, что параметры переданы правильно. так что это работает.
Может кто-нибудь написать это право, чтобы сработали операторы in, или скажите, почему это невозможно.
Спасибо.