Есть ли способ получить список объектов, отфильтрованных по полю jsonb из raw sql в Ebean? - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь получить некоторые записи из БД, которые соответствуют нескольким условиям (одно из них - поле jsonB). Когда я пытаюсь сделать это в postgres - это работает. Но когда я делаю это из кода Java, я получаю ошибку приведения postgres, и я не знаю, как ее решить.

Сначала я попытался использовать List, затем я создаю строку из этого списка, как в коде ниже,Я пытался преобразовать значения таблиц в jsonB через ":: jsonb" или "to_jsonb ()", но это не сработало. Ошибка: «PSQLException: ОШИБКА: оператор не существует: jsonb = символ меняется»

ArrayList tableId = new ArrayList(){
    {
        add(1);
        add(2);
    }
};
String tables = tableIds.stream().map(id -> "\'" + String.valueOf(id) + "\'").collect(Collectors.joining(","));

String sql = "SELECT id, date, table_info where date = :date and table_info -> 'id' in(:tableIds)";

            RawSql rawSql = RawSqlBuilder
                    .parse(sql)
                    .create();

            Query<Booking> query = Ebean.find(Booking.class);
            bookings = query.setRawSql(rawSql)
                    .setParameter("date",  date )
                    .setParameter("tableIds", tableIds)
                    .findSet();

Код SQL

select * from Booking
where date = '2019-11-07' and table_info -> 'id' in('1', '2');

Я хочу получить все записи по дате и гдеполе "id" в table_info равно списку tableId

...