一尘不染

Hibernate + MSSQL +通过包含进行全文本搜索

hibernate

我的目标是将MSSQL全文功能与HQL一起使用。在哪种情况下,我编写了一个特定的SQLFunction,将我的“全文”函数映射到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。


阅读 233

收藏
2020-06-20

共1个答案

一尘不染

我找到了一种对我有用的方法。

而不是产生

CONTAINS(a,b)

它会产生

CONTAINS(a,b) AND 1

并结合HQL查询

fulltext(a,b) = true

它将导致:

CONTAINS(a,b) AND 1 = 1

而且有效。

2020-06-20