| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > JPA Hibernate Postgresql тип данных xml |
| Автор: VMA 25.3.2008, 13:03 | ||||
| имеется база PostgreSQL, где хранится таблица htable с полями: id тип bigint, xmldata тип xml; имеется entity-класс для работы с данными
при попытке записать в таблицу в поле xmldata каких либо данных, postgreSQL выдает ошибку:
собственно вопрос какой тип задать полю xml в entity-классе? или нада какие-то настройки написать в файле конфигурации.... коего у меня нету |
| Автор: Shaggie 26.3.2008, 08:30 | ||
| VMA, у меня нет Постгреса 8.3 для адекватного тестирования, так что буду телепатить Так важно работать с xmldata как с массивом байт? Возможно, String вызовет большее понимание у ORM. Храни данные внутри бина в строке (и рефлекшн будет обрабатывать значение как строку), и используй геттеры и сеттеры для отображения её в логике программы в виде массива байт.
Если это не поможет - выкладывай стектрейс и будем телепатить дальше. Добавлено через 2 минуты и 28 секунд Вопрос модераторам - а почему byte не подсвечивается? Это же зарезервированное слово. |
| Автор: Shaggie 26.3.2008, 10:24 | ||
Вот вариант:
http://archives.postgresql.org/pgsql-jdbc/2007-12/msg00121.php И http://ejurka.com/pgsql/jars/mm/ на джары, имеющие такой функционал. Это касается, в первую очередь, PreparedStatement'ов, но, возможно, имеет смысл попробовать хранить Object xml и преобразовывать его в строку. Такой вопрос - а почему необходимо использовать именно xml data type для хранения в базе? Чем плох, например, text? Xml тип был введён в постгрес буквально вот только что, скорее всего стандартные аннотации просто не поспели за прогрессом, и драйверы тоже. |
| Автор: VMA 26.3.2008, 13:53 | ||
раз есть такой тип данных то решили по работе его использовать, дабы проводить xslt преобразования на уровне базы, видимо теперь ещё придется и приведение к типу XML из text делать |
| Автор: Shaggie 26.3.2008, 14:15 | ||
| Придумал вариант! Проблема на данный момент в том, что в стандартном классе org.hibernate.dialect.PostgreSQLDialect отсутствует ассоциация с xml. Решение - унаследовать класс и добавить необходимый функционал:
И зарегестрировать именно его качестве используемого диалекта. Добавлено через 5 минут и 43 секунды Рекомендую заглянуть в исходные коды класса org.hibernate.dialect.PostgreSQLDialect, там всё просто и понятно. К тому же вам, скорее всего, понадобятся стандартные постгресные функции для работы с xml, добавленные в версии 8.3 и отсутствующие на данный момент в стандартном диалекте. Тогда в конструкторе вашего диалекта после регистрации типа надо будет также зарегистрировать функции с помощью registerFunction(). Там, судя по исходникам, всё несложно. Удачи! Добавлено через 8 минут и 15 секунд import java.sql.Types, конечно. |