# Hibernate Update Problem



## winx (15. Feb 2005)

Hi,

ich arbeite mit Hibernate und Mysql.

wenn ich nun einen Datensatz per Hibernate in meine DB schreibe, kann ich diesen per konsole direkte nach dem schreiben auslesen.
Wenn ich jedoch mit hibernate auf die daten zugreifen möchte kann es die neu geschriebenen daten nicht finden.
das klappt erst bei einem neustart des programmes.

wer kann mir helfen?

danke


----------



## KSG9|sebastian (15. Feb 2005)

hum ???? 
du speicherst einen datensatz mit Session.save(..) oder wie ? und was meinst du mit "per konsole auslesen" und was mit "mit hibernate auf die daten zugreifen" 

erklär dein prob ma bissl genauer und poste n bissl code dann kann ich dir helfen, denk ich 

allgm:



```
/**
* Klasse Test hat ein Attribut id (Integer) als Primärschlüssel
* Die ID wird beim Speichern zurückgeschrieben
* Zusätzlich noch ein Attribut name
*/
Test t = new Test();
t.setName("test");
System.out.println(t.getId());  //Ausgabe: null
Session s = HibernateSessionFactory.currentSession();
Transaction tx = s.beginTransaction();
s.save(t);
tx.commit();
System.out.println(t.getId()); //Ausgabe: erzeugte Id
```

Da fehlen sämtliche Exceptions u.s.w., nur als kleines Beispiel


----------



## winx (16. Feb 2005)

Guten Morgen,

danke erstmal für deine Hilfe. Ich lege ein ProjektObjekt in einer Funktion an.
Dieses Objekt wird nun an meinen Singleton-Controller übergeben, der die Funktionalität
ausführt:

Das Projekt wird mit folgender Funktion gespeichert:

```
public boolean execute(DatabaseSaveAction action)
	{
		boolean ret=false;		
		
		Session session = null;
		
		try {
			session = sf.openSession();
		} catch (HibernateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		Transaction tx = null;
		
		try {
			
			tx = session.beginTransaction();
			ret = action.execute(session);				
			
			tx.commit();
			
		} catch (Exception e) {
			e.printStackTrace();
			if (tx != null){
				try {					
					tx.rollback();	
					System.out.println("Rollback Save Database Action ");
				} catch (Exception exc) {
					exc.printStackTrace();
				}
			}
		}

		finally {
			try {
				session.flush();
				session.close();
				
			} catch (Exception e) {
				e.printStackTrace();
			}
			
		}
		return ret;
				
	}
```

Bevor ich nun die Lesefunktion ausführe, habe ich einen Breakpoint zu Beginn der Lesefunktion gesetzt.
Wenn ich an dieser Stelle mit der MySQL Konsole in die DB gucke, sehe ich den neu angelegten Datensatz.
Wenn ich die Daten jedoch dann mit der Hibernate Funktion ansehen will, sind alle, bis auf den neu angelegten Datensatz, vorhanden.


```
public Object execute(DatabaseLoadAction action)
{
		Object obj = new Object();
	
			Session session = null;
			
			try {
				session = sf.openSession();
			} catch (HibernateException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			Transaction tx = null;
			
			try {
				
				tx = session.beginTransaction();
				obj = session.createQuery(action.execute()).list();
				
				
			} catch (Exception e) {
				e.printStackTrace();
			}
	
			finally {
				try {
					session.flush();
					session.close();
					
				} catch (Exception e) {
					e.printStackTrace();
				}
				
			}
			
			
			
			return obj;
}
```

Wer klasse, wenn du mir helfen könntest, ich hab echt keine Ahnung mehr, woran das liegen kann.

Thx,
winx


----------



## winx (16. Feb 2005)

thx


----------

