2013-03-06 2 views
1

Я разрабатываю простое приложение java с Hibernate с использованием H2.Спящий режим с H2 не сохраняет данные

Я не получаю исключения. Выход Hibernate и файл трассировки H2 показывают мне вставку данных.

Но данные не хранятся в db. Ни в спящем режиме, ни в консоли 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

ответ

0

Удалить опцию FILE_LOCK=NO из URL-адреса базы данных. Это очень опасно, так как это означает, что файл базы данных не защищен. Открытие базы данных таким образом приведет к повреждению файла базы данных, если база данных уже открыта.

+0

Я знаю. Потому что у меня была консоль H2, открытая для проверки содержимого, которое я запускаю без блокировки. ;) – steyze

+0

Если вы это сделаете, это скорее всего повредит базу данных. Вместо этого я предлагаю использовать [автоматический смешанный режим] (http://h2database.com/html/features.html#auto_mixed_mode) –

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