2013-03-06 138 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