在OpenJPA中使用inet postgres数据类型

时间:2015-01-12 16:52:41

标签: java postgresql openjpa

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

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

  1. 创建本机查询。此方法有效,但在我的特定情况下,为了插入此行而创建Native查询意味着创建更多由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。但是为了实现策略,我必须从类java.sql.Types(http://docs.oracle.com/javase/6/docs/api/java/sql/Types.html?is-external=true)设置列的类型,并且此列中没有inet类型。我尝试过Types.OTHER,但是我仍然有同样的错误,表明该列是一个类型inet,我试图插入的值是varchar(String)。

  4. 那么,有没有人知道如何解决我对映射的问题?

1 个答案:

答案 0 :(得分:0)

第2点的解决方案无法正常工作,因为openjpa.jdbc.DBDictionary已被类org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter覆盖,其数据库属性设置为POSTGRESQL。这显然将DBDictionary设置为org.apache.openjpa.jdbc.sql.PostgresDictionary,与persistence.xml属性中设置的值无关。

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