# Hibernate + MySQL Problem...



## kama (6. Mrz 2011)

Hallo,

ich bin gerade Dabei meine Kenntnisse zu Hibernate wieder auf den aktuellsten Stand zu bringen...

Jetzt habe ich eine DAO Schicht geschrieben und soweit funktioniert auch alles....

aber ich bekomme während meines Unit Tests folgende Fehlermeldung(Habe schon alle anderen Unit Tests auskommentiert):


```
011-03-06 09:42:00,601|DEBUG|main|casestudy.hibernate.HibernateUtil||HibernateUtil(done)
2011-03-06 09:42:01,732|DEBUG|main|casestudy.dao.HibernateDAO||save(PizzaGroesseBO id:1) done.
2011-03-06 09:42:01,732|INFO|main|soebes.casestudy.PizzaBOTest||PizzaGroesse:1
2011-03-06 09:42:01,734|DEBUG|main|casestudy.dao.HibernateDAO||save(ZutatBO id:1) done.
2011-03-06 09:42:01,734|INFO|main|soebes.casestudy.PizzaBOTest||Zutat:1
2011-03-06 09:42:01,735|DEBUG|main|casestudy.dao.HibernateDAO||save(ZutatBO id:2) done.
2011-03-06 09:42:01,735|INFO|main|soebes.casestudy.PizzaBOTest||Zutat:2
2011-03-06 09:42:01,755|DEBUG|main|casestudy.dao.HibernateDAO||save(PizzaBO id:1) done.
2011-03-06 09:42:01,756|INFO|main|soebes.casestudy.PizzaBOTest||Saved Pizza:1
2011-03-06 09:42:01,756|DEBUG|main|soebes.casestudy.PizzaBOTest||beforeClass(done)
2011-03-06 09:42:01,781|DEBUG|main|casestudy.dao.HibernateDAO||findAll(PizzaBO):2
2011-03-06 09:42:01,790|DEBUG|main|soebes.casestudy.PizzaBOTest||afterClass()
2011-03-06 09:42:01,792|DEBUG|main|casestudy.dao.HibernateDAO||findAll(PizzaBO):2
2011-03-06 09:42:01,793|INFO|main|soebes.casestudy.PizzaBOTest||deletePizza(): pizzaList:2
2011-03-06 09:42:01,793|INFO|main|soebes.casestudy.PizzaBOTest||Delete Pizza: 1
2011-03-06 09:42:01,801|INFO|main|soebes.casestudy.PizzaBOTest||Delete Pizza: 1
2011-03-06 09:42:01,803|ERROR|main|hibernate.jdbc.AbstractBatcher||Exception executing batch: 
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
	at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:85)
	at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:70)
	at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:90)
	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:172)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
	at com.soebes.casestudy.hibernate.HibernateUtil.commitTransaction(HibernateUtil.java:62)
	at com.soebes.casestudy.dao.HibernateDAO.remove(HibernateDAO.java:118)
	at com.soebes.casestudy.dao.IdDAO.remove(IdDAO.java:57)
	at com.soebes.casestudy.PizzaBOTest.deletePizza(PizzaBOTest.java:89)
	at com.soebes.casestudy.PizzaBOTest.afterClass(PizzaBOTest.java:59)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:74)
	at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:525)
	at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:202)
	at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:130)
	at org.testng.internal.TestMethodWorker.invokeAfterClassMethods(TestMethodWorker.java:222)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
	at org.testng.TestRunner.runWorkers(TestRunner.java:1125)
	at org.testng.TestRunner.privateRun(TestRunner.java:749)
	at org.testng.TestRunner.run(TestRunner.java:600)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:317)
	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:312)
```

Obwohl ich nur einmal ein PizzaBO speichere 

```
2011-03-06 09:42:01,755|DEBUG|main|casestudy.dao.HibernateDAO||save(PizzaBO id:1) done.
2011-03-06 09:42:01,756|INFO|main|soebes.casestudy.PizzaBOTest||Saved Pizza:1
```
liefert mir eine Abfrage trotzdem eine Liste mit Zwei Elementen.

```
2011-03-06 09:42:01,792|DEBUG|main|casestudy.dao.HibernateDAO||findAll(PizzaBO):2
2011-03-06 09:42:01,793|INFO|main|soebes.casestudy.PizzaBOTest||deletePizza(): pizzaList:2
```
Damit falle ich selbstverständlich beim Löschen auf die Nase....

Was ich aber nicht verstehe ist, woher ich den Zweiten Eintrag bekomme, vor allem da der die gleiche Id hat....

Der Code ist auf GitHub zu finden...

Hat vielleicht irgend jemand einen Tipp was ich falsch mache..Ich vermute ich habe derzeit ein Dickes Brett vor dem Kopf...

Gruß
Karl Heinz Marbaise


----------



## fastjack (6. Mrz 2011)

Check doch mal in beforeClass(), ob die DB wirklich leer ist. Ich denke dort wird noch eine Pizza enthalten sein. Vor dem DB-Test würde ich sicherstellen, das nur definierte Daten dort enthalten sind.


----------



## kama (6. Mrz 2011)

Hm...also erst einmal vielen Dank für Deine Antwort...

ich habe nochmal überprüft...im Rahmen des Unit Tests wird die Datenbank vollständig geleert (sprich alles Tabellen werden gedropped und danach leer wieder angelegt)...

Habe auch nochmal getestet und alles Unit Tests auskommentiert und danach habe ich eine Datenbank mit Tabellen aber OHNE Inhalt...

Somit schliesse ich jetzt zuerst einmal aus, das da Problem liegt...

EDIT: Jetzt nochmal den Build Prozess geändert, dass die Database per drop database gelöscht wird und danach wieder angelegt wird. Somit bin ich sicher, dass hier mit leeren Tabellen begonnen wird. Der Fehler bleibt aber.

Gruß
Karl Heinz Marbaise


----------

