Hibernate + MSSQL + полнотекстовый поиск через Contains - PullRequest
2 голосов
/ 28 февраля 2012

Моя цель - использовать полнотекстовую функцию MSSQL с HQL. Для какого случая я написал особую функцию SQLFunction, сопоставляющую мою функцию «fulltext» с функцией contains.

Однако проблема в том, что в HQL (кажется) я должен подробно использовать тип возврата, который функции MSSQL Contains не использует или не принимает.

Вот как это работает в MSSQL:

select distinct id from content c where CONTAINS(c.content, 'p')

Это моя идея использовать его в HQL:

select id from Content c  where fulltext(c.content, 'p') 

Это не работает, поскольку HQL требуется тип возвращаемого значения. Например, это будет разобрать в HQL:

select id from Content c  where fulltext(c.content, 'p') = true

И он сгенерирует как SQL:

select distinct id from content c where CONTAINS(c.content, 'p') = 1

, который не будет работать в MS SQL.

Мои идеи пока далеко, но то, что не представляется возможным в этой настройке:

  1. Сделать функции разбора hibernate без возвращаемого значения (Hibernate не поддерживает это в моей используемой версии)
  2. Попытка смешать HQL и SQL (также, похоже, не работает)

Кто-нибудь получил другую идею или помощь?

Используется моя версия Hibernate 3.2.6ga и MSSQL Server 2008.

Ответы [ 2 ]

3 голосов
/ 02 марта 2012

Я нашел способ, который работает для меня.

Вместо генерации

CONTAINS(a,b) 

будет генерироваться

CONTAINS(a,b) AND 1

И в сочетании с HQL-запросом

fulltext(a,b) = true

Это приведет к:

CONTAINS(a,b) AND 1 = 1 

И это работает.

1 голос
/ 28 февраля 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...