Мое приложение использует OpenJPA для подключения к базе данных Postgres. В схеме я использую тип данных inet postgres в столбце. Это поле в Java является строкой. Я могу правильно прочитать поле, но у меня проблемы со вставкой новой строки.
Поискав в Интернете, я нашел три возможных решения для этого:
Создание собственного запроса. Этот метод работает, но в моем конкретном случае создание собственного запроса для вставки этой строки подразумевает создание дополнительных запросов, которыми управляет OpenJPA, что может привести к множеству ошибок. Так что это не более подходящее решение в этом случае.
Создание PostgresDictionary, как в этом вопросе: Как использовать данные Inet Postgres печатать с помощью OpenJPA?. Я реализовал это именно так, как объясняет этот пользователь. Я создал собственный PostgresDictionary, добавил columnDefinition в аннотацию @Column и добавил свойство в файл 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).
Итак, кто-нибудь знает, как решить проблему, с которой я столкнулся при отображении?