2015-01-12 51 views
0

我的應用程序使用OpenJPA連接Postgres數據庫。在架構中,我在列中使用了inet postgres數據類型。 Java中的這個字段是一個字符串。我能夠正確地閱讀該字段,但我在插入新行時遇到問題。在OpenJPA中使用inet postgres數據類型

在互聯網上搜索我已經發現了三個可能的解決方案做到這一點:

  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)。

那麼,有沒有人有一個想法如何解決我與映射的問題?

回答

0

點2中的解決方案不起作用,因爲openjpa.jdbc.DBDictionary已被數據庫屬性設置爲POSTGRESQL的org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter類覆蓋。它獨立於persistence.xml屬性中設置的值,將DBDictionary設置爲org.apache.openjpa.jdbc.sql.PostgresDictionary。

從OpenJpaVendorAdapter中刪除此數據庫屬性允許使用我的自定義PostgresDictionary。