2010-12-13 12 views
4

私はHibernateを使い始めようとしていますが、何らかの理由でデータを挿入できません。エラーが出ないので正しく動作しているようですが、データベースをチェックするとテーブルが空です。私はそれが失敗したデータベース自体への接続とは思えません。なぜなら、テーブル名をマッピングXML内の非エキスティングなものに変更すると、Hibernateはこれを即座に作成します(しかし、 。誰もが問題が何であるか知っていますか?データは休止状態で挿入されませんが、エラーは発生しません。

は、ここに私のコードです:

はhibernate.cfg.xml:

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 
    <session-factory> 
      <property  name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
      <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/intex</property> 
      <property name="hibernate.connection.username">root</property> 
      <property name="hibernate.connection.password"></property> 
      <property name="hibernate.connection.pool_size">10</property> 
      <property name="show_sql">true</property> 
      <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
      <property name="hibernate.hbm2ddl.auto">update</property> 
      <!-- Mapping files --> 
      <mapping resource="intex.hbm.xml"/> 
    </session-factory> 
</hibernate-configuration> 

マイマップのxml:

<hibernate-mapping> 
    <class name="com.intex.uni.courses.Course" table="course"> 
    <id name="id" column="id" > 
    <generator class="increment"/> 
    </id> 

    <property name="name" column="name" /> 
    <property name="description" column="description" /> 
    <property name="url" column="url" /> 
    <property name="code" column="code" /> 
</class> 
</hibernate-mapping> 

そして、私のテストクライアント:

public class HibernateTest { 

    public static void main(String[] args) { 

     Session session = null; 

     try { 
      SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 
      session = sessionFactory.openSession(); 
      Course course = new Course(); 
      course.setDescription("Description"); 
      course.setName("NAME"); 
      course.setUrl("http://www.url.com"); 
      session.save(course); 
     } catch (Exception e) { 
      System.out.println(e.getMessage()); 
     } finally { 
      session.flush(); 
      session.close(); 
     } 
    } 
} 

私は本当に誰かが私を助けてくれることを願っています!事前に感謝:)

+0

Hibernateが生成するSQLも投稿できますか? –

答えて

5

を見て - Hibernate Getting Started Tutorial Example 2.5

代替あなたは、トランザクションが暗黙的になるように、あなたのコードにコミットモードの休止状態に設定することができるはずということです。

Session session = null; 
Transaction txn = null; 
try { 
    SessionFactory sessionFactory = 
     new Configuration().configure().buildSessionFactory(); 
    session = sessionFactory.openSession(); 
    txn = session.beginTransaction(); 
    Course course = new Course(); 
    course.setDescription("Description"); 
    course.setName("NAME"); 
    course.setUrl("http://www.url.com"); 
    session.save(course); 
    txn.commit(); 

} catch (Exception e) { 
    System.out.println(e.getMessage()); 
} finally { 
    if (!txn.wasCommitted()) { 
     txn.rollback(); 
    } 

    session.flush(); 
    session.close(); 
} 
+1

このトランザクション管理は自動的に行われませんか? –

5

私は、システムが必要な挿入を含むトランザクションをコミットしていないと思う。私は常にトランザクションを明示的に設定します。メインクラスでこのコードとテストを使用FlushMode

+0

ヒントをありがとう、私は明日チェックアウトします、私は今、私のコンピュータではない... – Kris

0

次のコードを試してみてください。

public class HibernateTest { 

    public static void main(String[] args) { 

     Session session = null; 
     Transaction txn = null; 
     try { 
      SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 
      session = sessionFactory.openSession(); 
      txn = session.beginTransaction(); 
      Course course = new Course(); 
      course.setDescription("Description"); 
      course.setName("NAME"); 
      course.setUrl("http://www.url.com"); 
      session.save(course); 
      txn.commit(); 
     } catch (Exception e) { 
      System.out.println(e.getMessage()); 
     } finally { 
      session.flush(); 
      session.close(); 
     } 
    } 
} 
+0

どうぞ – johannes

0

前にトランザクションを開始し、保存した後、トランザクションを保存してコミットしてください。

関連する問題