OpenJpa2.0 Как сопоставить столбец Oracle sys.XMLTYPE со строкой
Я изменил Изменение в persistence.xml Я также изменил определение столбца (columnDefinition="XDB.XMLType") для полей XML
Я проверил OpenJpa ( http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-td6208344.html) сайт и IBM ( http://www.ibm.com/support/knowledgecenter/SS7J6S_7.5.0/com.ibm.wsadapters.jca.jdbc.doc/env/doc/rjdb_problemsolutions.html)
Мой env - OpenJpa 2.0 и WAS 7
его исключение org.apache.openjpa.persistence.PersistenceException: ORA-06502: PL/SQL: ошибка числа или значения: слишком мал символьный буфер строки ORA-06512: в "SYS.XMLTYPE", строка 169
Пожалуйста, предложите, не меняя OpenJpa2.0 как часть IBM WebSphere Application Server V7.0, как я могу обрабатывать данные sys.XMLTYPE, я переношу свое приложение из db2 в Oracle в той же среде.
1 ответ
Написание XML-данных может быть сложным несколько раз! Получение правильных драйверов и вещей, определенных правильно, может иметь свои проблемы. Я не могу точно сказать, что вам нужно сделать, учитывая отсутствие информации о вашей доменной модели и тому подобное, но позвольте мне дать некоторые общие вещи, которые нужно искать. Во-первых, в структуре тестирования OpenJPA есть XML-тест, если вы хотите сослаться на него. Это можно увидеть публично здесь:
Или другой тест с использованием "XMLValueHandler" (вероятно, это выходит за рамки того, что вы ищете):
Во-вторых, (утверждая очевидное), я предполагаю, что у вас есть столбец в Oracle, определенный как "XMLTYPE". Также я вижу, что вы используете схему SYS. Я уверен, что вы знаете, но это схема системы / администратора...... просто для здравого смысла, вы можете сначала запустить все, используя схему не-системы / администратора, просто чтобы мы не зависали с любыми проблемами с вашим клиентом OpenJPA, не имеющим правильных разрешений.
Далее вам нужно следующее определение:
@Lob @Basic
@Column(name = "ANXMLCOLUMN", columnDefinition="XMLCOLUMN XMLType")
private String anXMLString;
@Lob, я думаю, будет необходим, если вы используете данные больше 4000 символов (это было упомянуто в одном из комментариев). Для начала я бы использовал очень небольшой набор данных (пару символов), как только это сработает, а затем поэкспериментируйте с> 4k.
Затем убедитесь, что вы используете правильный драйвер JDBC. В последний раз, когда я экспериментировал с XMLType, я использовал драйвер Oracle JDBC 11.2.0.2.
Наконец, вам может понадобиться использовать свойство "openjpa.jdbc.DBDictionary" со значением "oracle(supportsSetClob=true,maxEmbeddedClobSize=-1)". Опять же, поэкспериментируйте с этим AND и посмотрите документацию OpenJPA об этих свойствах, чтобы определить, необходимы ли они в вашем сценарии. Я думаю, что SupportSetClob = true будет необходимо только для более старой версии (до 2.2.x) OpenJPA. Вам также может понадобиться использовать свойство "openjpa.jdbc.SchemaFactory" со значением "native". Я бы посоветовал вам сначала попробовать без одного или этих двух свойств. Если это не поможет, поэкспериментируйте с этими двумя свойствами. Я знаю, что это расплывчато, но я не знаю, как выглядит ваш DDL или модель предметной области, поэтому я должен держать расплывчато.
Спасибо,
Хит Томанн