У меня ( все еще ) множество проблем с HSQLdb & OpenJPA.
Exception in thread "main" <openjpa-1.2.0-r422266:683325 fatal store error> org.apache.openjpa.persistence.RollbackException: user lacks privilege or object not found: OPENJPA_SEQUENCE_TABLE {SELECT SEQUENCE_VALUE FROM PUBLIC.OPENJPA_SEQUENCE_TABLE WHERE ID = ?} [code=-5501, state=42501]
at org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:523)
at model_layer.EntityManagerHelper.commit(EntityManagerHelper.java:46)
at HSQLdb_mvn_openJPA_autoTables.App.main(App.java:23)
HSQLdb работает как серверный процесс, связанный с портом 9001 на моей локальной машине. Пользователь SA. Это настроено следующим образом:
<persistence-unit name="HSQLdb_mvn_openJPA_autoTablesPU"
transaction-type="RESOURCE_LOCAL">
<provider>
org.apache.openjpa.persistence.PersistenceProviderImpl
</provider>
<class>model_layer.Testobjekt</class>
<class>model_layer.AbstractTestobjekt</class>
<properties>
<property name="openjpa.ConnectionUserName" value="SA" />
<property name="openjpa.ConnectionPassword" value=""/>
<property name="openjpa.ConnectionDriverName"
value="org.hsqldb.jdbc.JDBCDriver" />
<property name="openjpa.ConnectionURL"
value="jdbc:hsqldb:hsql://localhost:9001/mydb" />
<!--
<property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema(ForeignKeys=true)" />
-->
</properties>
</persistence-unit>
Я успешно установил соединение со своим слоем ORM. Я могу создать и подключиться к своему EntityManager.
Однако каждый раз, когда я использую
EntityManagerHelper.commit();
Ошибка с этой ошибкой, которая не имеет смысла для меня. SA - это стандартный администратор, которого я использовал для создания таблицы. Он должен быть в состоянии сохраняться как этот пользователь в hsqldb.
edit: после нескольких часов отладки я выяснил, почему это не удается. Этот тип сообщения об ошибке также появляется, если вы не установили обязательные записи в таблице (NOT NULL). Это не указывало на это для меня. Кажется, слой OpenJPA ошибается из-за того, что не может вставлять операторы из-за пропущенных записей из-за проблем с разрешениями. Поэтому я просто принял первый ответ. Спасибо за чтение:)