2015-01-12 3 views
0

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

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

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

  2. Создание PostgresDictionary как в этом вопросе: How to use Postgres inet data type with 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, но у меня все еще есть та же ошибка, указывающая, что столбец является типом типа, а значение, которое я пытаюсь вставить, - varchar (String).

Итак, есть ли у кого-нибудь идея, как исправить проблему, которую я испытываю при сопоставлении?

ответ

0

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

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