Когда я закрываю подключение к данным в спящем режиме, все еще присутствует файл блокировки.hibernate/hsqldb: Файл базы данных не найден после выключения
Это то, что я пробовал:
import java.util.HashMap;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class TestEntity {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;
@Column public String name = "";
public TestEntity() { }
}
public class TestWhyNotUnlockDatabase {
public static void main(String[] args) throws Exception {
Map<String, String> connProp = new HashMap<String,String>();
connProp.put("javax.persistence.jdbc.url","jdbc:hsqldb:file:\\Users\\Bernd\\.mld\\0.2\\solala.db;shutdown=true");
connProp.put("javax.persistence.schema-generation.database.action", "none");
System.out.println("Creating DB");
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("WhyNotUnLock",connProp);
EntityManager entityManager = entityManagerFactory.createEntityManager();
System.out.println("persisting");
entityManager.getTransaction().begin();
entityManager.persist(new TestEntity());
entityManager.getTransaction().commit();
System.out.println("closing");
entityManager.clear();
entityManager.close();
entityManagerFactory.close();
System.out.println("DB closed");
}
}
Выход, как и ожидалось:
Creating DB
WARN 2017-02-36 12:59:29 [main] org.hibernate.orm.connections.pooling - HHH10001002: Using Hibernate built-in connection pool (not for production use!)
persisting
closing
DB closed
Однако только следующие файлы здесь после завершения выполнения программы:
solala.db.properties
solala.db.script
Мои вопросы:
Я бы предположил, что данные хранятся в файле
solala.db
, но я не могу найти это. Где находится файл базы данных?Некоторые другие нечетные наблюдения: Я выполняю это в среде Windows Eclipse IDE (выпуск Neon.2 (4.6.2)). После запуска этой программы выход Exclipse, Eclipse больше не запускается. Сообщение об ошибке не указано. Только повторная установка Eclipse помогает (повторная загрузка недостаточно). Кажется, что некоторые артефакты остаются после окончания этой программы.
Дополнительная Информация Основная часть в persitence.xml
:
<persistence-unit name="WhyNotUnLock" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>masterlist.trials.TestEntity</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver" />
<property name="connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider" />
<property name="javax.persistence.jdbc.user" value="SA" />
<property name="javax.persistence.jdbc.password" value="" />
<property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:file://C:\\Users\\Bernd\\.mld\\0.1\\smallDB.db"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
<property name="hibernate.max_fetch_depth" value="3" />
<property name="hibernate.hbm2ddl.auto" value="validate" />
<property name="hibernate.max_fetch_depth" value="3" />
<property name="hibernate.hbm2ddl.auto" value="create" />
<!-- Echo all executed SQL to stdout -->
<property name="hibernate.show_sql" value="false" />
<property name="javax.persistence.schema-generation.database.action" value="none"/>
</properties>
</persistence-unit>
и моя зависимость в build.gradle
:
compile group: 'org.hibernate', name: 'hibernate-core', version: '5.2.6.Final'
compile group: 'org.hibernate', name: 'hibernate-ehcache', version: '5.2.6.Final'
compile group: 'org.hibernate', name: 'hibernate-validator', version: '5.4.0.CR1'
compile 'org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final'
compile group: 'org.hibernate', name: 'hibernate-c3p0', version: '5.2.6.Final'
compile 'com.enigmabridge:hibernate4-sqlite-dialect:0.1.2'
Edit 1 (без продублируйте)
Было высказано предположение, что этот вопрос является дубликатом enter link description here. Я посмотрел на этот ответ. К сожалению, я не смог получить ответ по этой ссылке. В этой ссылке автор хочет получить inmemory базу данных, где все файлы удаляются после завершения работы. В отличие от этого, я хочу, чтобы файл базы данных не просматривался после закрытия приложения.
Редактировать 2 (shutdown=true
)
Опция shutdown=true
был добавлен к коду. Теперь блокировка удалена. В любом случае файл базы данных все еще отсутствует. Название вопроса адаптировано.
Возможный дубликат [Режим в режиме ожидания HSQLDB не удаляет файлы при завершении работы) (http: // stackoverflo ш.com/questions/16694067/hsqldb-inmemory-mode-doesnt-delete-files-on-shutdown) – Naros
Спасибо, вам нравится Naros. К сожалению, я не мог заключить, как это помогает мне с моей проблемой. В вашей ссылке рассматривается база данных inmemory, в то время как я хочу, чтобы данные оставались в (незаметном) файле после завершения работы. (Информация также включена в редактирование моего вопроса.) – BerndGit
Ok. Теперь я понимаю, что HSQLDB хранит полную информацию в файле '* .script', который является ASCII. Правильно ли я это понял? Для меня это немного внушает удивление, поскольку пользователь может легко манипулировать паролем. Кроме того, он не выглядит очень эффективным способом хранения данных в условиях размера и производительности. Есть ли способ заставить HSQLDB хранить данные в двоичном формате? – BerndGit