2

给定一个像“192.168/16”这样的 CIDR 字符串,我想检查我的 PostgreSQL 表中的 IP 地址是否包含在其中。

我将编写的 SQL 大致如下:

SELECT ip FROM ip_mac WHERE ip << inet('192.168/16');

我们的应用程序使用 Hibernate。我已经定义了一个将字符串转换为 Inet 类型的 UserType。<<在查询 IP 地址时,我需要能够使用和其他。

  1. 如何让 Hibernate 渲染<<运算符?
  2. 如何让 Hibernate 进行渲染inet(CIDR_STRING)

我希望能够使用 Criteria API 来执行此操作,因为其他条件也可能是查询的一部分。我见过这个,但解决方案涉及使用本机 JPA 查询和强制转换。我宁愿在可能的情况下坚持使用 Java 语义。

4

2 回答 2

0

请注意,可以创建一个自定义的 Hibernate Criterion 来解决这个问题,允许使用 Criteria API 并避免使用原始 SQL 或 HQL。如果您已经将 Criteria 用于其他选择器,那么这是要走的路。

于 2014-10-30T15:15:37.837 回答
0

我提供我自己的答案。@Sotirios Delimanolis 的评论是正确的:我想要的无论是 HQL 还是标准都是不可能的。我们采用了 PostgreSQL 特定的原生 SQL 查询。这服务于我们这个应用程序的目的。

于 2013-09-20T15:34:41.713 回答