代码之家  ›  专栏  ›  技术社区  ›  HenryR

HSQLDB和Hibernate/JPA-不持久到磁盘?

  •  24
  • HenryR  · 技术社区  · 14 年前

    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个(活动中的活动对象数)。但是当我再次运行这个测试时,count(*)中的对象数并没有增加(在程序开始时是0)。所以这些对象不会被持久地写入。

    这是我的hsqldb连接字符串:

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

    所以据我所知它不是内存数据库。。。

    6 回复  |  直到 14 年前
        1
  •  30
  •   Pascal Thivent    14 年前

    有人知道为什么对象不能在一个JVM会话之外持久化吗?

    WRITE DELAY 默认情况下,HSQLDB不是持久的(这是“性能”的来源)。

    shutdown=true

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

    如果没有帮助,试着设置 设置为0(或false)。如果您使用的是hsqldb1.8.x,请使用SQL命令:

    SET WRITE_DELAY 0
    

    如果您使用的是hsqldb2.0.x,那么现在还可以使用连接 property hsqldb.write_delay :

    jdbc:hsqldb:file:data/cmon;hsqldb.write_delay=false
    
        2
  •  9
  •   Maciek Kreft    14 年前

    <property name="dialect">org.hibernate.dialect.HSQLDialect</property>
    

    在休眠.cfg.xml


    • HsqlDb 2.0.0版
    • 休眠3.5.6

    网址:

    <property name="connection.url">jdbc:hsqldb:file:data/mydb;shutdown=true;hsqldb.write_delay=false;</property>
    
        3
  •  8
  •   Chris Lercher    14 年前

    你准备好了吗 hibernate.hbm2ddl.auto create-drop 在你的持久性.xml?这会删除表并在每次启动时重新创建它们。

    你可以设置为 update validate

        4
  •  4
  •   Kaushik Lele    12 年前

    我尝试了上述方法,即设置shutdown=true和hsqldb.write\u delay=假 它不起作用。正如一些博客中所建议的,我添加了一个声明

    org.hsqldb.DatabaseManager.closeDatabases(0);
    

    hsqldb2.2.9版本似乎比这更好。通过一种解决方法,它解决了这个问题。要处理上述问题,请采取以下步骤:-

    2) 在hibernate配置xml中,只需指定URL 我使用的是基于HSQL文件的数据库。

     <property name="hibernate.connection.url">jdbc:hsqldb:file:D:\JavaProj\TmpDBLocation\myKauDB</property>
    

    3) 在你的程序末尾写下语句

    org.hsqldb.DatabaseManager数据库管理器.关闭数据库(0);
    

    通过在独立模式下打开hsqldb并使用URL检查它

    jdbc:hsqldb:file:D:\JavaProj\TmpDBLocation\myKauDB
    

        5
  •  3
  •   Jean-Luc    13 年前

        6
  •  1
  •   Pradeep    12 年前

    结束 数据源