在 OpenJPA 中使用 inet postgres 数据类型
Posted
技术标签:
【中文标题】在 OpenJPA 中使用 inet postgres 数据类型【英文标题】:Using inet postgres datatype with OpenJPA 【发布时间】:2015-01-12 16:52:40 【问题描述】:我的应用程序正在使用 OpenJPA 连接 Postgres 数据库。在架构中,我在列中使用 inet postgres 数据类型。 Java 中的这个字段是一个字符串。我能够正确读取该字段,但在插入新行时遇到问题。
在互联网上搜索我发现了三种可能的解决方案:
创建本机查询。此方法有效,但在我的特定情况下,创建本机查询以插入此行意味着创建更多由 OpenJPA 管理的查询,这可能会导致大量错误。所以在这种情况下它不是更合适的解决方案。
像这个问题一样创建 PostgresDictionary:How to use Postgres inet data type with OpenJPA?。我已经实现了这个用户解释的方式。我创建了自定义 PostgresDictionary,在 @Column 注释中添加了 columnDefinition,并在 persistence.xml 中添加了属性。但是我的自定义 PostgresDictionary 永远不会被调用。 当应用程序创建 PostgresDictionary 时,会继续创建 org.apache.openjpa.jdbc.sql.PostgresDictionary 而不是自定义的。
实现自定义策略,如示例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)。
那么,有人知道如何解决我在映射方面遇到的问题吗?
【问题讨论】:
【参考方案1】:第 2 点中的解决方案不起作用,因为 openjpa.jdbc.DBDictionary 已被数据库属性设置为 POSTGRESQL 的类 org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter 覆盖。这显然将 DBDictionary 设置为 org.apache.openjpa.jdbc.sql.PostgresDictionary 独立于 persistence.xml 属性中设置的值。
从 OpenJpaVendorAdapter 中删除此数据库属性允许我使用我的自定义 PostgresDictionary。
【讨论】:
以上是关于在 OpenJPA 中使用 inet postgres 数据类型的主要内容,如果未能解决你的问题,请参考以下文章
带有嵌套 SQL 查询或如何查找最后一个 INET 的 Postgres 视图
OpenJPA/MySQL:在 where 子句中使用同一张表时修改表