что-то забавное со встроенным hsql
-
19-09-2019 - |
Вопрос
мне просто любопытно кое о чем.Я использую hsql в myproject (встроенный, конечно).В какой-то момент я почувствовал необходимость визуализировать, что генерирует hibernate.Я взял бесплатную копию dbvisualizer.вот файл hsqljdbc.properties
jdbc.url=jdbc:hsqldb:файл:mydb;создать=true
перевести в спящий режим hbm2ddl.auto=создать
я скачал hsql 1.8.0_10.я выполнил всю необходимую процедуру. я мог подключиться и просмотреть таблицы, но после этого изменения, внесенные в таблицу, похоже, не желают отображаться.затем я попытался удалить базу данных, сгенерировав новую, но все же.У тебя есть какая-нибудь идея по этому поводу?
Обычно я занимаюсь дерби, но недавно понял, что в управлении взаимоотношениями нет такой точности.На данный момент я использую mysql, который не подходит для разработки, поэтому я хочу знать, забыл ли я что-то сделать или это просто предназначено для такого поведения.Спасибо, что прочитали это
Решение
Использование HSQLDB для разработки и тестирования подробно обсуждается в новом руководстве.
http://hsqldb.org/doc/2.0/guide/deployment-chapt.html#dec_app_dev_testing
HSQLDB по умолчанию использует механизм задержки записи, и изменения сбрасываются на диск через 10 секунд в версии 1.8.x или 0,5 секунды в версии 2.0 и более поздних версиях.
Вы можете принудительно завершить работу базы данных и записать все изменения при закрытии последнего соединения с помощью этого URL:
jdbc.url=jdbc:hsqldb:file:mydb;shutdown=true
С помощью HSQLDB 2.x вы можете использовать свойство write_delay, чтобы заставить каждую фиксацию немедленно записываться на диск:
jdbc.url=jdbc:hsqldb:file:mydb;hsqldb.write_delay=false
Версии 2.2.9 и более поздние сохраняют последние изменения при закрытии последнего соединения, поэтому может не потребоваться использовать hsqldb.write_delay=false
для тестов, которые закрывают соединения.
С HSQLDB 1.8 вам нужно запустить SQL-команду в начале, чтобы сделать это:
УСТАНОВИТЕ ЗНАЧЕНИЕ WRITE_DELAY FALSE
Другие советы
По умолчанию HSQLDB хранит содержимое таблицы в памяти до тех пор, пока база данных не будет закрыта: http://www.hsqldb.org/doc/guide/ch05.html#N10DD6
В зависимости от ваших потребностей (например, при работе в среде разработки) этого может быть достаточно.Однако для производства я бы предпочел использовать СУБД, которая записывает каждое изменение на диск в нескольких местах (что для меня означает Oracle, хотя MySQL, вероятно, работает так же хорошо).
Почему бы вам просто не установить show_sql
присвоите значение true, если вы хотите посмотреть, что делает hibernate?