2010-12-13 3 views
4

Ich versuche, mit Hibernate zu beginnen, kann aber aus irgendeinem Grund keine Daten einfügen. Es scheint ordnungsgemäß zu funktionieren, da kein Fehler vorliegt, aber wenn ich die Datenbank überprüfe, ist die Tabelle leer. Ich denke nicht, dass es die Verbindung zur Datenbank selbst ist, die fehlschlägt, weil, wenn ich den Tabellennamen zu einem nicht vorhandenen in der Mapping-XML ändere, Hibernate dies im laufenden Betrieb erstellt (Aber wie gesagt, keine Daten eingefügt) . Weiß jemand, was das Problem sein könnte?Daten nicht mit Ruhezustand eingefügt, gibt aber keinen Fehler?

Hier ist mein Code:

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> 

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

Und mein Test-Client:

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(); 
     } 
    } 
} 

Ich hoffe wirklich, dass jemand mir helfen kann! Vielen Dank im Voraus :)

+0

Könnten Sie auch die von Hibernate generierte SQL-Nachricht bereitstellen? –

Antwort

5

Verwendung diesen Code und Test in Hauptklasse.

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

sollte diese Transaktionsverwaltung nicht automatisch erfolgen? –

5

Ich vermute, dass das System nicht die Transaktion festlegt, die die erforderliche Einfügung enthält. Ich setze Transaktionen immer explizit, z. Hibernate Getting Started Tutorial Example 2.5

Eine Alternative ist, dass Sie in der Lage sein sollte, Set-Modus in Sie Code verpflichten Hibernate so dass die Transaktionen implizit sind - siehe FlushMode

+0

Danke für den Tipp, ich überprüfe es morgen, ich bin jetzt nicht an meinem Computer ... – Kris

0

Versuchen Sie, den folgenden Code:

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

bitte erklären Sie es – johannes

0

Bitte starten Sie Transaktion vor speichern und Transaktion nach speichern begehen.

Verwandte Themen