Java 将inet postgres数据类型与OpenJPA一起使用

Java 将inet postgres数据类型与OpenJPA一起使用,java,postgresql,openjpa,Java,Postgresql,Openjpa,我的应用程序正在使用OpenJPA连接Postgres数据库。在模式中,我在列中使用inet postgres数据类型。Java中的此字段是一个字符串。我能够正确读取字段,但插入新行时遇到问题 通过互联网搜索,我找到了三种可能的解决方案: 创建本机查询。这种方法是有效的,但在我的特定案例中,创建一个本机查询以插入此行意味着创建更多由OpenJPA管理的查询,这可能会导致很多错误。因此,在这种情况下,它不是更合适的解决方案 创建类似于此问题的PostgresDictionary:。我已经按照这个用

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

通过互联网搜索,我找到了三种可能的解决方案:

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

创建类似于此问题的PostgresDictionary:。我已经按照这个用户的解释实现了这一点。我创建了自定义PostgresDictionary,在@Column注释中添加了columnDefinition,在persistence.xml中添加了属性。但我的习惯PostgresDictionary从未被称为。 当应用程序创建PostgresDictionary时,PostgresDictionary会继续创建org.apache.openjpa.jdbc.sql.PostgresDictionary而不是自定义的

实现自定义策略,如本例所示。但是为了实现该策略,我必须从java.sql.Types类中设置列的类型,并且该列中没有inet类型。我尝试了Types.OTHER,但仍然有相同的错误,表明该列是inet类型,并且我尝试插入的值是varchar String


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

第2点中的解决方案不起作用,因为openjpa.jdbc.DBDictionary被org.springframework.orm.jpa.vendor类覆盖,该类的数据库属性设置为POSTGRESQL。它独立于persistence.xml属性中的值集,将DBDictionary设置为org.apache.openjpa.jdbc.sql.PostgresDictionary

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