Neue Buchung: ID ist NULL

Hier melden JVerein-Benutzer ihre Fehler

Moderator: heiner

Antworten
rscw
Beiträge: 21
Registriert: Donnerstag 10. November 2011, 19:11

Neue Buchung: ID ist NULL

Beitrag von rscw »

Hallo,

Ich habe mit viel manuellen Aufwand meine MYSQL Datenbank zurück nach h2 migriert. Ich habe diese in eine neue Jverein Installation kopiert. Soweit so gut, alles funktioniert. Aber jetzt wo ich eine neue Buchung erstellen will, scheint JVerein die ID nicht zu befüllen, und somit beschwert sich h2, dass diese nicht NULL sein darf.

Ich habe einen ganzen Tag Aufwand mit der Migration gehabt, und weiss ehrlich gesagt nicht, was schief gegangen sein könnte. Wenn ich mich über squirrel mit h2 verbinde, führt ein "select max(id) from buchung" einwandfrei zu einem Ergebnis. Oder bestimmt JVerein die neue ID etwa anders?

Log:

Code: Alles auswählen

[Fri Feb 09 00:01:31 CET 2018][DEBUG][main][de.willuhn.datasource.db.AbstractDBObject.getInsertSQL] executing sql statement: prep52: insert into BUCHUNG (DATUM,BLATTNUMMER,PROJEKT,ART,BETRAG,ABRECHNUNGSLAUF,MITGLIEDSKONTO,AUSZUGSNUMMER,VERZICHT,KONTO,SPENDENBESCHEINIGUNG,NAME,BUCHUNGSART,SPLITID,SPLITTYP,UMSATZID,ZWECK,KOMMENTAR) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) {1: DATE '2017-05-13', 2: NULL, 3: NULL, 4: '', 5: 2.0, 6: NULL, 7: NULL, 8: NULL, 9: FALSE, 10: 3, 11: NULL, 12: 'Kuchenverkauf', 13: 32, 14: NULL, 15: NULL, 16: NULL, 17: 'Kuchenverkauf', 18: ''}
[Fri Feb 09 00:01:31 CET 2018][ERROR][main][de.jost_net.JVerein.gui.control.BuchungsControl.handleStore] Fehler beim Speichern der Buchung.
java.rmi.RemoteException: insert failed; nested exception is: 
	org.h2.jdbc.JdbcSQLException: NULL nicht zulässig für Feld "ID"
NULL not allowed for column "ID"; SQL statement:
insert into BUCHUNG (DATUM,BLATTNUMMER,PROJEKT,ART,BETRAG,ABRECHNUNGSLAUF,MITGLIEDSKONTO,AUSZUGSNUMMER,VERZICHT,KONTO,SPENDENBESCHEINIGUNG,NAME,BUCHUNGSART,SPLITID,SPLITTYP,UMSATZID,ZWECK,KOMMENTAR) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) [23502-193]
	at de.willuhn.datasource.db.AbstractDBObject.insert(AbstractDBObject.java:709)
	at de.willuhn.datasource.db.AbstractDBObject.store(AbstractDBObject.java:316)
	at de.jost_net.JVerein.gui.control.BuchungsControl.handleStore(BuchungsControl.java:760)
	at de.jost_net.JVerein.gui.control.BuchungsControl.buchungSpeichern(BuchungsControl.java:1515)
	at de.jost_net.JVerein.gui.control.BuchungsControl.access$600(BuchungsControl.java:102)
	at de.jost_net.JVerein.gui.control.BuchungsControl$16.handleAction(BuchungsControl.java:1505)
	at de.willuhn.jameica.gui.parts.Button$1$1.run(Button.java:177)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(Unknown Source)
	at de.willuhn.jameica.gui.GUI$6.run(GUI.java:896)
	at org.eclipse.swt.widgets.Synchronizer.syncExec(Unknown Source)
	at org.eclipse.swt.widgets.Display.syncExec(Unknown Source)
	at de.willuhn.jameica.gui.GUI.startSync(GUI.java:892)
	at de.willuhn.jameica.gui.parts.Button$1.widgetSelected(Button.java:171)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
	at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
	at org.eclipse.swt.widgets.Display.sendEvent(Unknown Source)
	at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
	at de.willuhn.jameica.gui.GUI.loop(GUI.java:913)
	at de.willuhn.jameica.gui.GUI.init(GUI.java:324)
	at de.willuhn.jameica.system.Application.init(Application.java:148)
	at de.willuhn.jameica.system.Application.newInstance(Application.java:90)
	at de.willuhn.jameica.Main.main(Main.java:78)
Caused by: org.h2.jdbc.JdbcSQLException: NULL nicht zulässig für Feld "ID"
NULL not allowed for column "ID"; SQL statement:
insert into BUCHUNG (DATUM,BLATTNUMMER,PROJEKT,ART,BETRAG,ABRECHNUNGSLAUF,MITGLIEDSKONTO,AUSZUGSNUMMER,VERZICHT,KONTO,SPENDENBESCHEINIGUNG,NAME,BUCHUNGSART,SPLITID,SPLITTYP,UMSATZID,ZWECK,KOMMENTAR) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) [23502-193]
	at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
	at org.h2.message.DbException.get(DbException.java:179)
	at org.h2.message.DbException.get(DbException.java:155)
	at org.h2.table.Column.validateConvertUpdateSequence(Column.java:311)
	at org.h2.table.Table.validateConvertUpdateSequence(Table.java:784)
	at org.h2.command.dml.Insert.insertRows(Insert.java:151)
	at org.h2.command.dml.Insert.update(Insert.java:114)
	at org.h2.command.CommandContainer.update(CommandContainer.java:98)
	at org.h2.command.Command.executeUpdate(Command.java:258)
	at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:160)
	at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:146)
	at de.willuhn.datasource.db.AbstractDBObject.insert(AbstractDBObject.java:657)
	... 23 more

[Fri Feb 09 00:01:31 CET 2018][DEBUG][main][de.willuhn.datasource.db.AbstractDBObject.transactionRollback] [rollback] transaction count: 0
[Fri Feb 09 00:01:31 CET 2018][DEBUG][main][de.willuhn.datasource.db.AbstractDBObject.transactionRollback] [rollback] transaction rollback
[Fri Feb 09 00:01:31 CET 2018][DEBUG][pool-1-thread-1][de.willuhn.jameica.messaging.NamedConcurrentQueue.deliver] deliver message [Fri Feb 09 00:01:31 CET 2018][ERROR] Fehler beim Speichern der Buchung.
rscw
Beiträge: 21
Registriert: Donnerstag 10. November 2011, 19:11

Re: Neue Buchung: ID ist NULL

Beitrag von rscw »

Ich glaube ich habe schon was gefunden: In der Tabelle ist kein primary key definiert. Somit weiß h2 gar nicht, dass er bei "insert" selbst was generieren muss, aber es ist schon eingestellt, dass ID nicht null sein darf.

Ich glaube, das ganze stammt daher, dass ich die Datenbankstruktur mit Squirrel kopiert habe, und die mit "alter table" arbeitet, was SQLite nicht unterstützt. Ich werde jetzt mal versuchen, eine möglichst leere DB von JVerein erstellen zu lassen, und dann da alle Daten herein zu kopieren. Pffff....

Edit: Das war die Lösung. Problem war, ich habe die DB komplett mit squirrel aufgesetzt. Ich hätte eine leere DB durch JVerein erstellen lassen sollen, und nur die Inhalte mit Squirrel rüber kopieren müssen. Froh dass ich nicht wieder zurück auf Stand von heute (gestern) Morgen muss....
Antworten