2017-02-06 6 views
0

У меня есть объект с полем Струнного помеченным как Лоб:JPA: LIKE на поле Лба

@Lob 
public String getJson() { 
    return json; 
} 

Мне нужно сделать запрос с условием, как на этом поле, используя jpql. Я не могу использовать собственный запрос, потому что код должен быть совместим как с Oracle, так и с Postgresql. Я использую hibernate как реализацию jpa. Запрос ничего не возвращает, даже если он правильно переведен (я сделал запрос на v $ _sqlarea oracle, чтобы увидеть его и его параметры). Выполнение переведенного запроса на белку прекрасно работает.

Я пытаюсь сделать неправильную/не разрешенную операцию на поле для заполнения? Кто-нибудь делает то же самое с успехом?

+0

Есть ли в журналах какие-либо пойманные ошибки? Используете ли вы последние версии драйверов JDBC для обеих баз данных в случае возникновения проблемы с поддержкой драйверов? – Naros

+0

Ошибка. Он просто не возвращает никаких записей. Я использую hibernate 4.0.0 и weblogic 12.1.3, jpa 2.0 –

ответ

0

Поддержка использования предиката оператора LIKE на @Lob аннотированных полях, вероятно, будет ударить или пропустить в зависимости от используемого диалекта. Это связано с тем, что он зависит от типа данных, который используется для сопоставления данных CLOB в столбце базы данных.

Например, диалект SQL Server может отобразить поле @Lob аннотированный String к типу TEXT данных, в то время как устаревший, не позволяет оператору LIKE. Но другой диалект может сопоставить это поле с типом данных, который база данных не разрешает оператору LIKE.

Другие диалекты могут допускать LIKE-подобных операций против CLOB колонок; однако они делают это с помощью специальных функций, специфичных для конкретной базы данных. В таких случаях вам придется использовать эти функции для поддержки ваших поисков, если это требование применимо к вашему диалекту.

+0

Я использую диалект Oracle или диалект Postgresql. Обе базы данных поддерживаются как в полях Clob. –