运行程序后,文件数据库中没有架构通过hibernate持久化到hsqldb:file
下面是hibernate.cfg.xml:运行程序后,文件数据库中没有架构通过hibernate持久化到hsqldb:file,hibernate,hsqldb,Hibernate,Hsqldb,下面是hibernate.cfg.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-con
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.url">jdbc:hsqldb:file:test_db_file</property>
<property name="hsqldb.write_delay">false</property>
<property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="dialect">org.hibernate.dialect.HSQLDialect</property>
<property name="hibernate.connection.username">combine1</property>
<property name="hibernate.connection.password"></property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>
<!--
few resources
-->
</session-factory>
</hibernate-configuration>
jdbc:hsqldb:file:test\u db\u文件
假的
org.hsqldb.jdbcDriver
org.hibernate.dialogue.hsql方言
组合1
线
org.hibernate.cache.NoCacheProvider
真的
创造
当我将hsqldb更改为mysql db时,它工作得很好。但当我像这样离开它,并将hsqldb:file作为数据库连接到NetBeans中时,在公共模式中并没有任何东西可以在运行程序后找到创建的表
在运行时,类被持久化,我可以从会话等加载它们,但在程序结束后,什么都并没有。除了在test_db_file.script中,还有创建所需架构的查询,而不是我保存到数据库中的行
这是我的简单main,正如我所写的,当我使用一些mysql数据库时,它可以工作:
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import resources.HibernateUtil;
import website.Website;
public class MrhAdministration {
public static void main(String[] args) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
WebsiteCreator.create(session);
Criteria criterial = session.createCriteria(Website.class);
for (Website w : (List<Website>) criterial.list()) {
System.out.println("Sites: " + w.getSiteName() + " " + w.getSiteUrl());
}
session.getTransaction().commit();
}
}
import java.util.List;
导入org.hibernate.Criteria;
导入org.hibernate.Session;
导入资源.HibernateUtil;
进口网站。网站;
公营部门{
公共静态void main(字符串[]args){
会话会话=HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
创建(会话);
criterial=session.createCriterial(Website.class);
对于(网站w:(列表)criterial.List()){
System.out.println(“站点:+w.getSiteName()+”+w.getSiteUrl());
}
session.getTransaction().commit();
}
}
谢谢你的回答 最可能的问题是数据库文件的位置。您使用的是相对路径jdbc:hsqldb:file:test_db_file,当您使用不同的程序访问数据库时,它会解析到不同的位置。尝试绝对路径,例如
jdbc:hsqldb:file:/db/test\u db\u file
注意:用户名和写入延迟的其他设置对最新版本2.2.x及更高版本有效。它们不适用于1.8.x版。谢谢您的回复,这一点很好,但当我使用绝对地址时,两者都使用相同的用户证书(我通过netbeans数据库连接创建数据库文件,然后尝试从我得到的程序中使用它:
java.sql.SQLException:database lock acquisition failure:lockFile:org.hsqldb.persist。LockFile@340e5f64[file=/home/myhome/tmp/mydb1/mydb1.lck
有什么想法吗?以某种方式在mydb1.script中设置权限?您可以一次使用一个进程访问数据库。错误显示数据库仍由另一个Java进程保持打开状态。如果要同时访问,请运行HSQLDB服务器。