Hallo,
Ich habe schwierigkeiten beim Löschen von Daten aus der Datenbank.
Mit diesem Code möchte ich sätze aus den DB Tabellen Löschen, jedoch tut er das nicht und wirft eine Exception.
Code:
public void deleteDepartmentByUser(User user, Department dep) {
Session ses = HibernatePool.getSessionFactory("as400").openSession();
try {
Transaction tx = ses.beginTransaction();
Query query = ses.createQuery("from UserInDepartment where idUser = :idUser and idDepartment = :idDepartment");
query.setString("idUser", user.getIdUser());
query.setString("idDepartment", dep.getIdDepartment());
List lst = query.list();
System.out.println("found: " + lst.size());
for (int i = 0; i < lst.size(); i++) {
UserInDepartment uid = (UserInDepartment) lst.get(i);
ses.delete(uid);
uid = null;
ses.flush();
}
tx.commit();
} catch (Exception e) {
e.printStackTrace();
}
ses.close();
}
Code:
found: 1
Hibernate: delete from GXBS_UID where idUserInDepartment=?
- Exception executing batch:
org.hibernate.jdbc.BatchedTooManyRowsAffectedException: Batch update returned un
expected row count from update [0]; actual row count: 2; expected: 1
at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expecta
tions.java:71)
at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expect
ations.java:46)
at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.jav
a:68)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.jav
a:48)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:
246)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:144)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutio
ns(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlus
hEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at de.geis.webapps.gcc.userandpermissions.server.UserManager.deleteDepar
tmentByUser(UserManager.java:236)
at de.geis.webapps.gcc.userandpermissions.UserManager.deleteDepartmentBy
User(UserManager.java:18)
at de.geis.webapps.gcc.userandpermissions.UserAdapter.doDepartmentDelete
(UserAdapter.java:310)
[ ... ]
Wenn ich direkt in die Datenbank schaue ist der Satz auch noch vorhanden. Auch wenn ich mir aus der Session direkt die JDBC Connection hole und einen DELETE SQL Befehle absende bleibt der Satz unberührt.
Ist so ein (fehl)verhalten bekannt? Kann das an der Konfiguration liegen?
Das Kuriose ist das er es manchmal ohne Probleme macht, aber überwiegend bekomme ich diese Exception.
mfg,
Michael Schmuck