# MySQL Datenbank mit Hibernate befüllen



## chris01 (7. Okt 2007)

Hi,

ich befasse mich gerade etwas mit Hibernate, dabei habe ich nun leider ein Problem. Ich habe alle Dateien wie in diesem Beispiel angelegt: http://www.laliluna.de/first-hibernate-example-tutorial.html , aber leider trägt er mir nichts in die Datenbank ein. Das Programm liefert mir folgendes zurück:


```
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Inserting Record
Hibernate: select max(id) from honey
Done
Hibernate: insert into honey (name, taste, id) values (?, ?, ?)
```

Hier nochmal mein Code

HibernateTest.java


```
package de.test.util.Hibernate;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;
import de.test.util.main.*;

public class HibernateTest {
  public static void main(String[] args) {
    Session session = null;

    try{
      // This step will read hibernate.cfg.xml and prepare hibernate for use
      SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
       session = sessionFactory.openSession();
        //Create new instance of Contact and set values in it by reading them from form object
         System.out.println("Inserting Record");
        Honey honey = new Honey();
        honey.setTaste("Test");
        honey.setName("none");
        session.save(honey);
        System.out.println("Done");
    }catch(Exception e){
      System.out.println(e.getMessage());
    }finally{
      // Actual contact insertion will happen at this step
      session.flush();
      session.close();

      }
    
  }
}
```

Honey.java


```
package de.test.util.main;

public class Honey {
	private Integer id;
	private String name;
	private String taste;
	/**
	 * @return the id
	 */
	public Integer getId() {
		return id;
	}
	/**
	 * @param id the id to set
	 */
	public void setId(Integer id) {
		this.id = id;
	}
	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}
	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}
	/**
	 * @return the taste
	 */
	public String getTaste() {
		return taste;
	}
	/**
	 * @param taste the taste to set
	 */
	public void setTaste(String taste) {
		this.taste = taste;
	}
	

	

}
```

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="connection.url">jdbc:mysql://localhost/hibernate</property>
	<property name="connection.username">root</property>
	<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
	<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
	<property name="connection.password"><password></property>
 <property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
    <!--  thread is the short name for
      org.hibernate.context.ThreadLocalSessionContext
      and let Hibernate bind the session automatically to the thread
    -->
    <property name="current_session_context_class">thread</property>
    
    <property name="hibernate.show_sql">true</property>
 
	
	<mapping resource="test.hbm.xml" />

</session-factory>
</hibernate-configuration>
```

test.hbm.xml

```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
 <class name="de.test.util.main.Honey" table="honey">
 <id name="id" column="id" type="java.lang.Integer">
 <generator class="increment"/>
 </id>
 <property name="name" column="name" type="java.lang.String" />
 <property name="taste" column="taste" type="java.lang.String" />
 </class>
</hibernate-mapping>
```

Die Datenbank(name: hibernate) sieht so aus:
Tabellenname: honey

ID | name | taste


Leider kriege ich sonst keine Fehlermeldungen und würde mich sehr freuen, wenn mir jemand helfen würde!

Gruß

Chris


----------



## *Hendrik (7. Okt 2007)

http://www.laliluna.de/first-hibernate-example-tutorial.html - hier steht:



> Configuring Log4J
> 
> As you can see above we added the log4j library. This library does like a configuration file in the source directory or it welcomes you with the following error.
> log4j:WARN No appenders could be found for logger (TestClient).
> log4j:WARN Please initialize the log4j system properly.



Also: 


> Create a file named log4j.properties in the root directory and insert the following: ...


----------



## chris01 (7. Okt 2007)

Das habe ich gemacht, nun bekomme ich diese Ausgaben:



> 16:27:45,171  INFO Environment:514 - Hibernate 3.2.5
> 16:27:45,203  INFO Environment:547 - hibernate.properties not found
> 16:27:45,234  INFO Environment:681 - Bytecode provider name : cglib
> 16:27:45,234  INFO Environment:598 - using JDK 1.4 java.sql.Timestamp handling
> ...



Aber das Problem das er die Daten nicht einträgt besteht leider immer noch...

Gruß

Chris


----------



## Guest (7. Okt 2007)

autocommit mode: false

Starte eine Transaktion und führe commit()/rollback() aus.


----------



## *Hendrik (7. Okt 2007)

Was mir in Deiner Testklasse auffällt, ist das Fehlen des Startens einer Transaktion - wie z.B. bei Deiner verlinkten Seite in der Methode createHoney(); Schau Dir die Methode an und ändere Deine Testklasse entsprechend, so dass eine Transaktion verwendet wird.


----------



## chris01 (7. Okt 2007)

Hi,

vielen Dank nun funktioniert es!

Gruß

Chris


----------

