2010-12-13 89 views
4

我試圖開始使用Hibernate,但由於某種原因無法插入數據。它似乎工作正常,因爲沒有給出錯誤,但是當我檢查數據庫時表是空的。我不認爲它與數據庫本身的連接失敗,因爲當我在映射xml中將表名稱更改爲一個不感興趣的表名時,Hibernate會即時創建它(但正如我所說的,沒有插入任何數據) 。有誰知道是什麼問題?數據沒有使用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嗎? – 2010-12-13 16:43:49

回答

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

不應該自動完成此事務管理嗎? – 2014-10-14 08:19:46

5

我懷疑係統沒有提交包含所需插入的事務。我總是明確設置交易,例如Hibernate Getting Started Tutorial Example 2.5

另一種方法是,你應該能夠設置Hibernate的提交模式在你的代碼,這樣交易是隱性的 - 看FlushMode

+0

感謝您的提示,明天我會查看它,我現在不在我的電腦... – Kris 2010-12-13 20:04:08

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 2012-10-27 17:34:01

0

請前開始交易保存和提交事務後保存。

相關問題