2013-03-06 98 views
1

我正在开发一个简单的Java应用与Hibernate使用H2。休眠与H2不存储数据

我没有收到任何异常。 Hibernate输出和H2的跟踪文件显示了我插入的数据。

但数据不存储在数据库中。 休眠和H2控制台都不显示任何插入的数据。

也许有人有一个想法。

THX

这是我的Hibernate的配置:

<hibernate-configuration> 
    <session-factory> 
    <property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property> 
    <property name="hibernate.connection.driver_class">org.h2.Driver</property> 
    <property name="hibernate.connection.url">jdbc:h2:~/HibTest;TRACE_LEVEL_FILE=3;FILE_LOCK=NO</property> 
    <property name="hibernate.connection.username">sa</property> 
    <property name="hibernate.connection.password"></property> 

    <property name="hibernate.hbm2ddl.auto">create-drop</property> 

    <mapping package="de.test.hib.domain" /> 
    <mapping class="de.test.hib.domain.Data" /> 
    </session-factory> 
</hibernate-configuration> 

这是我的域类:

package de.test.hib.domain; 

import java.io.Serializable; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.SequenceGenerator; 


@Entity 
@SequenceGenerator(sequenceName="SEQ_DATA",name="SEQ_DATA_GEN",initialValue=1) 
public class Data implements Serializable { 

    private static final long serialVersionUID = 1L; 

    private Integer id; 
    private String content; 

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (id != null ? id.hashCode() : 0); 
     return hash; 
    } 

    @Override 
    public boolean equals(Object object) { 
     if (!(object instanceof Data)) { 
      return false; 
     } 

     Data other = (Data) object; 
     if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { 
      return false; 
     } 

     return true; 
    } 

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="SEQ_PERSON_GEN") 
    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    @Column(nullable=false) 
    public String getContent() { 
     return content; 
    } 

    public void setContent(String content) { 
     this.content = content; 
    } 
} 

而持续的过程:

Transaction trans = HibernateUtils.getInstance().getCurrentSession().beginTransaction(); 
HibernateUtils.getInstance().getCurrentSession().saveOrUpdate(this); 
HibernateUtils.getInstance().getCurrentSession().flush(); 
trans.commit(); 
+0

同时我集成了Spring来管理Hibernate连接。它适用于这个解决方案,但为我的应用程序引入了一点开销。 – steyze 2013-03-07 08:43:19

回答

0

删除选项FILE_LOCK=NO来自数据库URL。这是非常危险的,因为它意味着数据库文件不受保护。如果数据库已经打开,以这种方式打开数据库将损坏数据库文件。

+0

我知道。因为我打开了H2控制台来检查无锁启动的内容。 ;) – steyze 2013-03-07 08:41:30

+0

如果你这样做,它很可能会损坏数据库。相反,我建议使用[自动混合模式](http://h2database.com/html/features.html#auto_mixed_mode) – 2013-03-07 10:12:03