HSQLDB и Hibernate / JPA - нет сохранение на диск?

Что-то от новичка с HSQL и Hibernate ...

em.getTransaction().begin();
for (Activity theActivity : activities) {
  em.persist(theActivity);
}
em.getTransaction().commit();
em.close();

, за которым следует ...

EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
System.out.println("QUERY:: "
    + em.createQuery("SELECT COUNT(*) FROM " + Activity.class.getName()).getSingleResult()
        .toString());
em.getTransaction().commit();

Печать 25000 (количество объектов Activity в действиях). Но когда я снова запускаю этот тест, количество объектов в count (*) не увеличивается (и равно 0 в начале программы). Таким образом, объекты не пишутся длительно.

Это моя строка подключения hsqldb:

name="hibernate.connection.url" value="jdbc:hsqldb:file:data/cmon"

, поэтому, насколько я знаю, это не база данных в памяти ...

У кого-нибудь есть идеи, почему объекты не сохраняются после одного сеанса JVM? Рад предоставить больше информации, но с Hibernate / JPA / HSQL связано так много состояний, что неясно, что именно уместно.

25
задан Pascal Thivent 24 August 2010 в 03:35
поделиться

2 ответа

Есть ли у кого-нибудь идеи, почему объекты не сохраняются после одного сеанса JVM?

HSQLDB не записывает изменения на диск сразу после фиксации (см. «ЗАДЕРЖКА ЗАПИСИ»), по умолчанию HSQLDB не является устойчивой (отсюда и «производительность»).

Либо попробуйте установить свойство подключения shutdown=true в строке подключения, чтобы изменения записывались при завершении последнего подключения.

jdbc:hsqldb:file:data/cmon;shutdown=true

Если это не помогает, попробуйте установить для параметра WRITE DELAY значение 0 (или false). Если вы используете HSQLDB 1.8.x, используйте команду SQL:

SET WRITE_DELAY 0

Если вы используете HSQLDB 2.0.x, теперь вы также можете использовать свойство соединения hsqldb.write_delay:

jdbc:hsqldb:file:data/cmon;hsqldb.write_delay=false
29
ответ дан 28 November 2019 в 20:45
поделиться

Установили ли вы hibernate.hbm2ddl.auto на create-drop в вашем persistence.xml? Это уничтожит ваши таблицы и создаст их заново при каждом запуске.

Вместо этого вы можете установить update, или, если вы хотите управлять схемой самостоятельно, установите validate.

7
ответ дан 28 November 2019 в 20:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: