2017-02-05 23 views
0

Когда я закрываю подключение к данным в спящем режиме, все еще присутствует файл блокировки.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 был добавлен к коду. Теперь блокировка удалена. В любом случае файл базы данных все еще отсутствует. Название вопроса адаптировано.

+1

Возможный дубликат [Режим в режиме ожидания HSQLDB не удаляет файлы при завершении работы) (http: // stackoverflo ш.com/questions/16694067/hsqldb-inmemory-mode-doesnt-delete-files-on-shutdown) – Naros

+0

Спасибо, вам нравится Naros. К сожалению, я не мог заключить, как это помогает мне с моей проблемой. В вашей ссылке рассматривается база данных inmemory, в то время как я хочу, чтобы данные оставались в (незаметном) файле после завершения работы. (Информация также включена в редактирование моего вопроса.) – BerndGit

+0

Ok. Теперь я понимаю, что HSQLDB хранит полную информацию в файле '* .script', который является ASCII. Правильно ли я это понял? Для меня это немного внушает удивление, поскольку пользователь может легко манипулировать паролем. Кроме того, он не выглядит очень эффективным способом хранения данных в условиях размера и производительности. Есть ли способ заставить HSQLDB хранить данные в двоичном формате? – BerndGit

ответ

0

Частично ответ: Установка shutdown=true удалили временный файл и файл блокировки:

connProp.put("javax.persistence.jdbc.url","jdbc:hsqldb:file:\\Users\\Bernd\\.mld\\0.2\\solala.db;shutdown=true"); 

Не только два файла остаются:

solala.db.properties 
solala.db.script 

Я до сих пор ищет solala.db

+1

Эти два файла являются базой данных. Никакой другой файл не существует, если у вас нет таблиц CACHED. – fredt

+0

Спасибо, fredt. Теперь понимаю. – BerndGit

 Смежные вопросы

  • Нет связанных вопросов^_^