一尘不染

Hibernate + PostgreSQL +网络地址类型(inet,cdir)

hibernate

我从Hibernate 4.2.7和PostgreSQL 9.3.1开始了我的示例项目,一切进展顺利。

目前,我想使用INET
PostgreSQL类型,
但无法使用Hibernate进行映射。

我收到此hibernate错误: 无法确定类型:inet,在表:DEVICE_IP_ADDRESS,用于列…

我使用 org.hibernate.dialect.PostgreSQLDialect 和hbm.xml配置文件。

我的hibernate映射文件:

<property name="ipAddress" type="inet">
     <column name="IP_ADDRESS" not-null="true" />
</property>

我问谷歌,但找不到任何可用的解决方案。你可以帮帮我吗?

谢谢!

编辑:如果我想使用“额外的”
postgresql类型和PostGIS类型,您认为我需要使用哪种类型的ORM实现?

还是我需要使用简单的JDBC?


阅读 366

收藏
2020-06-20

共1个答案

一尘不染

最近,我在Hibernate 3和Postgres 9中遇到了类似的问题。由于hibernate没有为postgres中的String
Array提供到Java String []的内置映射,因此我最终实现了一个自定义映射类。您可以尝试执行以下步骤。

  1. 创建实现“ org.hibernate.usertype.UserType”的自定义类“ PgInet”(根据我的hibernate 3知识,此UserType类。不确定在Hibernate 4中是否已更改)。
  2. 下面的方法实现至关重要。

    • 等于
    • nullSafeGet
    • nullSafeSet
    • returnClass返回InetAddress.class;
    • sqlTypes返回新的int [] {java.sql.Types。}

完成上述操作后,我们只需要将HBM.xml中的属性类型设置为此类,即PgInet。

对于自定义类实现,请尝试参考现有的类型实现类。您应该能够找到类文件。使用下面的链接作为参考。

http://grepcode.com/file/repo1.maven.org/maven2/hibernate/hibernate/2.1.8/net/sf/hibernate/type/ArrayType.java

希望这可以帮助。

谢谢。

2020-06-20