【问题标题】:Regex Queries without using Native SQL queries - JPA不使用本机 SQL 查询的正则表达式查询 - JPA
【发布时间】:2017-05-13 11:14:42
【问题描述】:

我的问题是如何通过正则表达式从数据库 (PostgreSQL) 中获取值,但不使用本机 SQL 查询。 我发现的唯一方法是使用 Hibernate Criteria API:

criteria.add(Restrictions.sqlRestriction("name ~ '^(?!" + filter + ")'"));

但这种方法也使用 SQL。 Spring 数据具有查询创建功能,但正则表达式搜索似乎仅适用于 MongoDb。

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repository-query-keywords

我的目标不是依赖原生 sql 查询,而是使用对象,并使我的项目可移植到任何其他数据库。

【问题讨论】:

  • JPA 正在做 O-R 映射。您的查询最终必须转换为 SQL 才能在 DBMS 中执行。忘记 JPA,问问自己:如何在不使用 SQL 的情况下从 PostGres 检索数据并且是“可移植的”?我不相信你能做到。
  • 很明显hibernate、spring data等最终都会使用sql查询,没有别的办法。我正在寻找这些函数,例如: someObject.addRegex(String regex).
  • someObject.addRegex(String regex) 没有任何意义。您正在寻找的东西是不可归档的:没有 便携式您可以在没有 SQL 的情况下从不同的 DBMS 查询数据
  • 所以?...您引用的内容与您的问题无关

标签: java regex postgresql hibernate spring-data


【解决方案1】:

您可以通过扩展 Hibernate Dialect 类并添加您的自定义方法来做到这一点。真的有魔法吗? :)

【讨论】:

  • 更新:如果您使用 Spring MVC 并且只想从 url 参数中获取匹配项,那么您可以在 RequestMapping 中使用正则表达式模式。例如:@RequestMapping(value = "/e{^\\+?\\d+\$}")
猜你喜欢
  • 1970-01-01
  • 2023-04-06
  • 2015-12-20
  • 1970-01-01
  • 2017-06-18
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 2020-03-06
相关资源
最近更新 更多