当前位置: 首页 > 知识库问答 >
问题:

具有自定义数据库功能的Hibernate标准

黎奇思
2023-03-14

我将HiberNate 4与PostgreSQL 9一起使用。我想使用自定义postgres函数过滤行,如下所示:

SELECT * FROM customer WHERE name % ?

(我正在使用三元组搜索,一个 postgres 扩展)。

在< code >会话中使用此功能。CreateQuery()之后,我按照本教程实现了自己的< code>SQLFunction和< code > PostgreSQL diaclet 。

该函数的工作原理和外观如下:

session.createQuery("FROM Customer WHERE trgm_match(name, :name) = true");

现在到了困难的部分:

我需要使用多个搜索条件查询表,并希望使用Hibernate的条件。我怎样才能在criteria.add(Limits. ??

我认为add(Restrictions.sqlRe的限制("名称 % ?", 过滤器,??));可能就足够了,但是我应该传递什么作为第三个参数呢?(该列的类型为VARCHAR

我经常看到< code>Hibernate的用法。字符串,这在Hibernate 4中似乎不存在。

如有任何帮助,将不胜感激。

共有2个答案

戚晨
2023-03-14

我发现< code >冬眠了。字符串已被否决:Hibernate 4.1 Hibernate的最终替代。线

以下语句可以工作,但最好使用自定义限制类获得解决方案:

add(Restrictions.sqlRestriction("name % ?", filter, StringType.INSTANCE));
史英睿
2023-03-14

也许您可以尝试先以<code>Predicate</code>列表的形式创建一些限制。下面是我的代码示例

List<Predicate> predicates = new ArrayList<Predicate>();

//add predicates based on your business logic
if (model.getCreateDateFrom() != null)            
predicates.add(cb.greaterThanOrEqualTo(event.get(Event_.createDate), 
                    model.getCreateDateFrom()));

...
//add predicate utilizing your DB function
//0.00001111111 ~= 1 meter
if (model.getLatitude() != null)
    predicates.add(cb.equal(cb.function("is_point_inside_circle", Boolean.class, 
    cb.literal(model.getLatitude()), cb.literal(model.getLongitude()),
    event.get(Event_.latitude), event.get(Event_.longitude), 
    cb.literal(model.getRadius() * 0.00001111111)), true));

//set 'where' clause by converting list to array
cq.where(predicates.toArray(new Predicate[] {}));

//perform query
//...

还可以在这里阅读:JPA标准api与包含函数

 类似资料:
  • 问题内容: 如果我要在数据库中定义某些功能(也许是Postgres或任何其他数据库): 我会从SQL中将其称为: 如何从Hibernate调用诸如此类的自定义函数? 问题答案: 如果要在HQL中使用自定义函数,则需要在相应的方言中定义它 看一下PostgreSQLDialect(或其他任何来源)的源代码,您会看到一堆registerFunction()调用。您需要再添加一个:-)-用于您自己的自定

  • 我正在研究Liquibase,以将数据库与Spring集成。我想问:是否有任何插件或类似的东西用于通过 liquibase 自动保存数据库中的更改。:D例如:我在用户表中插入新行(用户ID,用户名,密码),然后该插件自动生成db-changelog.xml: 非常感谢。

  • 我如何在Azure功能中接受自定义媒体类型(通过HTTP触发器)?如果有必要的话,我使用的是函数v2和持久函数扩展(1.4)以及C#。 我读过关于Web API的自定义媒体类型格式化程序的文章,但没有找到任何关于WebJobs/函数的类似建议。

  • 1.1.1. 自定义功能 1.1.2. 拦截器 1.1.3. 入口词多样化 1.1.4. 场景化技能 1.1.1. 自定义功能 本文将讲解除了Rokid技能创建平台上面提供的技能开发工具外,平台独有的一些自定义功能。 目录 一、拦截器 二、入口词多样化 三、场景化技能 1.1.2. 拦截器 拦截器接口文档 语义理解(NLP)的拦截器(interceptor),可以允许开发者在进入Rokid NLP

  • 我想用Criterias执行这个查询,但它似乎没有按预期工作: 我试过这个 但是它返回一个结果,就像我在执行这个查询一样 它只返回列描述。 我的问题是,如何告诉Hibernate我想要表中的所有列,但我不想重复Description列中的变量?

  • 问题内容: 可以应用于以上以及以下内容: 日期时间对象上的Django F表达式 当然,我也很高兴看到任何其他方法!! 题: Django / GeoDjango有一些类似或可以这样使用的数据库函数: 有什么方法可以基于现有的数据库功能使用和/或创建自己的自定义数据库功能,例如: (MySQL) (SQLite) (带有PostGIS的PostgreSQL) 如何在Django / GeoDjan