数据没有被插入到使用Hibernate HSQLDB数据库

问题描述 投票:3回答:3

我照顾commiting交易,但数据库仍然保存对象之后空。没有错误,休眠甚至显示插入的SQL命令。一切都OK了,当我添加<property name="hibernate.connection.autocommit">true</property>线到我的休眠配置XML,但我听说这是不是一个好的做法。我使用的HSQLDB数据库。

下面是一段我的代码插入数据。

    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    Client c = new Client();
    c.setImie("John");
    c.setNazwisko("Kennedy"); 
    session.save(c);
    session.getTransaction().commit();
    session.close();
java database hibernate hsqldb
3个回答
0
投票

其中的一些可以在某些情况下自动发生,但除非你被配置为自动做出来,你需要做的他们三人都在这条命令:

  1. Session.save()更新从JVM中对象的Hibernate的看法。
  2. Session.flush()通过发出SQL语句更新对象的数据库的视图。
  3. Session.getTransaction().commit()犯数据库的事务。

http://docs.jboss.org/hibernate/orm/4.1/javadocs/org/hibernate/Session.html#flush()


0
投票

你可能忘了你的对象保存到使用调用Session.flush(数据库)之前commiting到数据库(session.getTransaction().commit())。由于Hibernate参考本身的规定:

强制此会话刷新。必须在工作单元的末端被调用,提交事务和关闭会话之前(取决于冲洗模式,器transaction.commit()调用此方法)。

并且:

“刷新是同步与保存在存储器中可持久状态底层持久存储的过程”。

编辑:

读一点关于HSQLDB后,我看到了一些东西,可以发生在你身上:

1 - 由于HSQLDB是不是默认(从“ACID”的d)耐用,它不会立即持久化数据到磁盘。我知道。不那么可爱。所以,你必须“强迫”当最后一个连接完成后,设置属性shutdown=true更改的写入;从用户指南:

您可以使用shutdown =真正的连接属性,以确保数据库的连接被关闭后,完全保留。

2 - 为了让您的更改立即写入磁盘使用属性hsqldb.write_delay=false;

所以,你与你的连接字符串中像这样结束:

;shutdown=true;hsqldb.write_delay=false;

希望能帮助到你!


0
投票

我的问题的解决方案是在第一注释下的问题在这个线程link描述

© www.soinside.com 2019 - 2024. All rights reserved.