2017-09-26 198 views
3

在客戶端,我們有使用過濾器進行搜索的端點。如何使用Hibernate Criteria在Postgresql JSON中搜索並使用橫向

在後端我有搜索Postgresql DB的方法。其中一個選項 - 搜索jsonb字段。

在這一天之前我搜索了。而我的代碼是:

if (appFilter.getSearchValue() != null) { 
    criteria.add(Restrictions.sqlRestriction("UPPER(values::text) LIKE '%" + appFilter.getSearchValue().toUpperCase() + "%'")); 
} 

SQL模擬(UPPER - 不是強制性的):

SELECT * 
FROM application 
WHERE UPPER(values :: TEXT) LIKE '%some text%' 

現在我需要尋找只進值。這個purpouse的SQL查詢:

SELECT * 
FROM application, LATERAL json_each_text(application.values :: JSON) 
WHERE value :: TEXT LIKE '%some text%'; 

我如何將這個添加到限制?也許有任何其他變種搜索值? 休眠5.0.12

回答

1

Restrictions.sqlRestriction將在生成的SQL後WHERE子句與AND所以你需要添加像這樣

criteria.add(Restrictions.sqlRestriction("this_.id IN (SELECT application.id FROM application , LATERAL json_each_text(values :: JSON) WHERE UPPER(value :: TEXT) LIKE '%" + appFilter.getSearchValue().toUpperCase() +"%')")); 
被插入