将 inet postgres 数据类型与 OpenJPA 结合使用

Using inet postgres datatype with OpenJPA

我的应用程序正在使用 OpenJPA 连接 Postgres 数据库。在模式中,我在列中使用了 inet postgres 数据类型。 Java 中的这个字段是一个字符串。我能够正确读取该字段,但在插入新行时遇到问题。

在 Internet 上搜索我找到了三种可能的解决方案:

  1. 正在创建本机查询。此方法有效,但在我的特定情况下,创建本机查询以插入此行意味着创建更多由 OpenJPA 管理的查询,这可能会导致很多错误。所以在这种情况下它不是更合适的解决方案。

  2. 像这个问题一样创建 PostgresDictionary:How to use Postgres inet data type with OpenJPA?。我已经完全按照该用户的解释实现了这一点。我创建了自定义 PostgresDictionary,在 @Column 注释中添加了 columnDefinition,在 persistence.xml 中添加了 属性。但是我的自定义 PostgresDictionary 从未被调用过。 当应用程序创建 PostgresDictionary 时,它会继续创建 org.apache.openjpa.jdbc.sql.PostgresDictionary 而不是自定义的

  3. 正在实施自定义策略,如本示例http://webspherepersistence.blogspot.co.at/2009/04/custom-orm-with-openjpa.html. But in order to implement the Strategy, I have to set the type of the column from the class java.sql.Types (http://docs.oracle.com/javase/6/docs/api/java/sql/Types.html?is-external=true),此列中没有 inet 类型。我试过 Types.OTHER,但我仍然有同样的错误,表明该列是 inet 类型,我试图插入的值是 varchar (String)。

那么,有人知道如何解决我遇到的映射问题吗?

第 2 点中的解决方案无效,因为 openjpa.jdbc.DBDictionary 被 class org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter 覆盖,数据库 属性 设置为 POSTGRESQL。这显然将 DBDictionary 设置为 org.apache.openjpa.jdbc.sql.PostgresDictionary 独立于 persistence.xml 属性.

中设置的值

从 OpenJpaVendorAdapter 中删除此数据库 属性 允许我使用我的自定义 PostgresDictionary。