0

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-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>

hsqldb を mysql db に変更すると、正常に動作します。しかし、このままにして hsqldb:file を NetBeans のデータベースとして接続すると、プログラムの実行後に作成されたテーブルを見つけると思われる Public スキーマには何もありません。

実行中はクラスが永続化され、セッションなどからロードできますが、プログラムの終了後は何もありません。test_db_file.script を除いて、目的のスキーマを作成するためのクエリがありますが、db に保存した行は含まれません。

私が書いたように、これが私の単純なメインです。いくつかの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();
  }
}

答えてくれてありがとう!

4

1 に答える 1

0

最も可能性の高い問題は、データベースファイルの場所です。jdbc:hsqldb:file:test_db_fileさまざまなプログラムを使用してデータベースにアクセスすると、さまざまな場所に解決される相対パスを使用しています。たとえば、絶対パスを試してくださいjdbc:hsqldb:file:/db/test_db_file

usernameとwrite_delayの他の設定は、最新バージョン2.2.x以降で有効であることに注意してください。バージョン1.8.xでは機能しません。

于 2012-10-28T21:45:06.603 に答える