Использование типа данных inet postgres с OpenJPA

Мое приложение использует OpenJPA для подключения к базе данных Postgres. В схеме я использую тип данных inet postgres в столбце. Это поле в Java является строкой. Я могу правильно прочитать поле, но у меня проблемы со вставкой новой строки.

Поискав в Интернете, я нашел три возможных решения для этого:

  1. Создание собственного запроса. Этот метод работает, но в моем конкретном случае создание собственного запроса для вставки этой строки подразумевает создание дополнительных запросов, которыми управляет OpenJPA, что может привести к множеству ошибок. Так что это не более подходящее решение в этом случае.

  2. Создание PostgresDictionary, как в этом вопросе: Как использовать данные Inet Postgres печатать с помощью OpenJPA?. Я реализовал это именно так, как объясняет этот пользователь. Я создал собственный PostgresDictionary, добавил columnDefinition в аннотацию @Column и добавил свойство в файл 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).

Итак, кто-нибудь знает, как решить проблему, с которой я столкнулся при отображении?


person user1448668    schedule 12.01.2015    source источник


Ответы (1)


Решение в пункте 2 не работало, потому что openjpa.jdbc.DBDictionary был переопределен классом org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter, в котором для свойства базы данных установлено значение POSTGRESQL. Который, по-видимому, устанавливает для DBDictionary значение org.apache.openjpa.jdbc.sql.PostgresDictionary независимо от значения, установленного в свойстве persistence.xml.

Удаление этого свойства базы данных из OpenJpaVendorAdapter позволило мне использовать свой собственный PostgresDictionary.

person user1448668    schedule 13.01.2015