Что-то от новичка с 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 связано так много состояний, что неясно, что именно уместно.
Есть ли у кого-нибудь идеи, почему объекты не сохраняются после одного сеанса 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
Установили ли вы hibernate.hbm2ddl.auto
на create-drop
в вашем persistence.xml? Это уничтожит ваши таблицы и создаст их заново при каждом запуске.
Вместо этого вы можете установить update
, или, если вы хотите управлять схемой самостоятельно, установите validate
.