2015-03-31 107 views
1

我试图使用Hibernate在多线程应用程序源码并获得SQLITE_BUSY错误:休眠sqlite的SQLITE_BUSY

[SQLITE_BUSY] The database file is locked (database is locked) 

简化代码重现错误1线:

Session session = sessionFactory.openSession(); 
session.beginTransaction(); 
session.save(new Object()); 
session.flush(); 

Session session2 = sessionFactory.openSession(); 
session2.beginTransaction(); 
session2.save(new Object()); 
session2.getTransaction().commit(); 

由于普遍建议我设置pool_size为1,但它没有帮助

<property name="connection.pool_size">1</property> 
<property name="hibernate.connection.pool_size">1</property> 

我使用的软件包:

sqlite-jdbc: 3.8.7 
hibernate: 4.3.8 

回答

1

定制连接池hibernate-c3p0完成了这项工作。 只需添加到pom.xml中:

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-c3p0</artifactId> 
     <version>4.3.7.Final</version> 
</dependency> 

而且在hibernate.cfg.xml:

<property name="hibernate.c3p0.min_size">1</property> 
<property name="hibernate.c3p0.max_size">1</property> 
+0

看起来很不错,但有一个例外:初始SessionFactory的创建failed.java.lang.NoSuchMethodError:组织。 hibernate.c3p0.internal.C3P0MessageLogger.connectionProperties(Ljava/UTIL /属性;)V 异常在线程 “主” java.lang.ExceptionInInitializerError \t在nl.deholtmans.HibernateHelloWorld.HibernateUtil.buildSessionFactory(HibernateUtil.java:17) \t at nl.deholtmans .HibernateHelloWorld.HibernateUtil。 (HibernateUtil.java:8) \t at nl.deholtmans.HibernateHelloWorld.OneToManyExampleStockData.main(OneToManyExampleStockData.java:17) – tjm1706 2016-11-27 16:44:44