2016-03-14 2 views
1

При использовании OpenJPA для выполнения оператора выбора в org.apache.derby базы данных в оперативной памяти, я встречаю эту ошибку:OpenJPA Синтаксическая ошибка: Обнаружен «оптимизируют»

javax.ejb.EJBException: The bean encountered a non-application exception; nested exception is: 
<openjpa-2.1.2-SNAPSHOT-r422266:1636464 fatal general error> org.apache.openjpa.persistence.PersistenceException: Syntax error: Encountered "optimize" at line 1, column 80. {SELECT t0.VERSION, t0.SOMEOTHER_COLUMN FROM MYTABLE t0 WHERE t0.MYTABLE_CODE = ? optimize for 1 row} [code=20000, state=42X01] FailedObject: UDA [org.apache.openjpa.util.StringId] [java.lang.String] 

Клиент OpenJPA встроен в IBM Клиент WebSphere: com.ibm.ws.jpa.thinclient-8.5.5.5.jar

Очевидно, OpenJPA добавляет часть «оптимизировать для 1 строки», потому что считает, что она имеет дело с DB2? Как это возможно? Есть ли способ отключить эту функцию?

я нашел какое-то объяснение на постфиксе «оптимизировать для 1 ряда»: https://www.ibm.com/developerworks/community/blogs/22586cb0-8817-4d2c-ae74-0ddcc2a409bc/entry/optimize_for_1_row1?lang=en

+0

Вне JPA Я постоянно использую оператор optimize для DB2. Это способ сказать оптимизатору выбрать путь доступа, который быстрее всего подходит для x строк. Если вы хотите только 1 строку, он может выбрать другой путь доступа, если вы хотите 20. Неважно, сколько строк находится в наборе результатов, вы можете пролистывать страницы, но он просто выбирает конкретный план доступа. –

+0

Я ошибся, эта часть кода использует базу данных в памяти (Derby). Я отрегулирую исходный вопрос. – Kjeld

+0

Где ваша конфигурация БД? Где-то вы должны установить диалект. Похоже, что вы используете этот набор для DB2, когда используете Derby. Вероятно, вам понадобится несколько разных профилей, чтобы вы могли переключаться между конфигурацией конфигурации и live config. –

ответ

1

Apparently OpenJPA adds the 'optimize for 1 row' part because it thinks it is dealing with DB2? How could this be possible? Is there any way I can turn off this feature explicitly?

С информацией, я не знаю, почему это так.

К счастью, вы можете изменить это с помощью следующего свойства в вашем persistence.xml:

<property name="openjpa.jdbc.DBDictionary" value="derby"/> 
0

решаемые его. Приложение настроено на derby, но оно использует службу доступа к данным, которая, в свою очередь, имеет db2, указанный в качестве словаря БД. Я обслуживаю существующий код и поэтому не могу сразу найти эту настройку. Спасибо вам за то, что указали мне в правильном направлении.

 Смежные вопросы

  • Нет связанных вопросов^_^