J
Javalearner
Gast
Hallo zusammen,
ich habe Ausgangssituation: Ich möchte per Hibernate einen Datenbankeintrag machen. Beim normalen Start der Testklasse wird kein Eintrag in die Datenbank erzeugt.
Hier der Code der Testklasse (auf das Wesentliche gekürzt):
Wenn ich jetzt einen Breakpoint zu Beginn von "createHoney()" setze und ich das Testprogramm debugge, läuft alles fehlerfrei bis zur letzten Zeile der main()-Methode. Der Fehler entsteht also in der geschweiften Klammer "}":
In dem Debugmodus kann ich folgende Information entnehmen:
Thread[main] ausgesetzt
Thread.exit() Zeile: nicht verfügbar
"Die Quelle wurde nicht gefunden".
Anschließend breche ich den Debugmodus ab.
Komischerweise wird der Datensatz beim Debuggen in die Datenbank geschrieben, beim "normalen" Ausführen jedoch nicht.
Meine Frage: Wird erst der Datensatz beim Beenden in die Datenbank geschrieben? Ich kann es mir nur schwer vorstellen, weil die Methode fehlerfrei durchläuft. Oder woran könnte es noch liegen?
ich habe Ausgangssituation: Ich möchte per Hibernate einen Datenbankeintrag machen. Beim normalen Start der Testklasse wird kein Eintrag in die Datenbank erzeugt.
Hier der Code der Testklasse (auf das Wesentliche gekürzt):
Code:
package de.laliluna.example;
import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
/**
* @author laliluna
*
*/
public class TestClient
{
public static void main(String[] args)
{
createHoney();
}
private static Integer createHoney()
{
Session session = null;
Transaction tx = null;
Logger log = Logger.getLogger("TestClient");
log.info("creating honey");
// [laliluna] our returned primary key
Integer id = null;
try
{
// [laliluna] get the session from the factory
session = HibernateSessionFactory.currentSession();
// [laliluna] always start a transaction before doing something
// (even reading) from the database
tx = session.beginTransaction();
// [laliluna] create a new object
Honey honey = new Honey();
honey.setName("Sebastian's favourite honey");
honey.setTaste("sweet");
// [laliluna] save it to the database, Hibernate returns your object
// with the primary key field updated!
System.out.println("----Speichern beginnt!----");
id = (Integer) session.save(honey);
System.out.println("----Speichern Ende!----");
// [laliluna] commit your transaction or nothing is wrote to the db
System.out.println("----Commit beginnt!----");
tx.commit();
System.out.println("----Ende des Commits!----");
System.out.println("----Schließen beginnt!----");
// [laliluna] clean up (close the session)
session.close();
System.out.println("----Ende des Schließens!----");
}
catch (HibernateException e)
{
// [laliluna] when an error occured, try to rollback your
// transaction
if (tx != null)
try
{
tx.rollback();
}
catch (HibernateException e1)
{
log.warn("rollback not successful");
}
/*
* [laliluna] close your session after an exception!! Your session
* is in an undefined and unstable situation so throw it away!
*
*/
if (session != null)
try
{
session.close();
}
catch (HibernateException e2)
{
log.warn("session close not successful");
}
}
return id;
}
Wenn ich jetzt einen Breakpoint zu Beginn von "createHoney()" setze und ich das Testprogramm debugge, läuft alles fehlerfrei bis zur letzten Zeile der main()-Methode. Der Fehler entsteht also in der geschweiften Klammer "}":
Code:
public static void main(String[] args)
{
createHoney();
}
In dem Debugmodus kann ich folgende Information entnehmen:
Thread[main] ausgesetzt
Thread.exit() Zeile: nicht verfügbar
"Die Quelle wurde nicht gefunden".
Anschließend breche ich den Debugmodus ab.
Komischerweise wird der Datensatz beim Debuggen in die Datenbank geschrieben, beim "normalen" Ausführen jedoch nicht.
Meine Frage: Wird erst der Datensatz beim Beenden in die Datenbank geschrieben? Ich kann es mir nur schwer vorstellen, weil die Methode fehlerfrei durchläuft. Oder woran könnte es noch liegen?