Разрешения HSQLdb относительно OpenJPA - PullRequest
0 голосов
/ 01 июня 2010

У меня ( все еще ) множество проблем с 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 ошибается из-за того, что не может вставлять операторы из-за пропущенных записей из-за проблем с разрешениями. Поэтому я просто принял первый ответ. Спасибо за чтение:)

1 Ответ

1 голос
/ 01 июня 2010

У меня сложилось впечатление, что HSQL не имеет прав на запись своего файла данных в настроенный каталог.

Это происходит со мной все время, когда я тестирую свой сервер вручную как root / Administrator и что при запуске его в качестве демона / сервиса он меняется на менее привилегированного пользователя. Тогда файлы принадлежат другому пользователю, так как сервер работает как.

Это могут быть и другие причины: в Windows это было, когда другой процесс (другой экземпляр сервера) все еще цеплялся за файлы, или даже когда Eclipse в своей бесконечной мудрости решил проиндексировать базу данных.

...