Fucking Komma

Nicht zu glauben, dass man über ein Komma stolpern kann. Mir ist es passiert. Der Prototyp zu meiner Diplomarbeit speichert alle Daten in einer Textdatenbank (HSQLDB); das funktioniert ausgezeichnet. Nun erdreistete ich mich jedoch, mehrere Werte, getrennt durch ein Komma, in einer Spalte einer Tabelle der Datenbank zu speichern. Was für ein Fehler! Plötzlich gab’s nur noch Probleme.

Nach etwas Überlegung fiel mir ein, dass zwei Spalten einer Tabelle per Festlegung durch ein Komma getrennt werden. Aaarrrghh! Also entweder die Werte nicht durch ein Komma trennen oder, so hab ich’s gemacht, die Spalte als Typ Text kennzeichen. Dann funktionierts. Manchmal sind’s eben die Kleinigkeiten, die den Programmieralltag zum Albtraum interessant machen.

Update:

Das arme Komma! Zu unrecht verteufelt von mir, wie sich jetzt herausgestellt hat. Der Fehler trat weiterhin auf, jedoch erst ab einem bestimmten Punkt. Komisch, oder? Ich hab’ jetzt aber die Ursache gefunden. Was für eine Scheiße!

Da ich von Geburt an faul bin, nutze ich natürlich ORM, um auf die Datenbank zuzugreifen. In Java, damit muss ich programmieren, bietet sich da Hibernate an. Nun zum Grund des unerwarteten Verhaltens: In meiner Tabelle gibt’s noch eine Spalte mit einem Zähler. Wird der Zähler erhöht (inkrementiert), wird automatisch die Spalte auf einen Default-Wert zurückgesetzt, in der die durch Komma getrennten Werte stehen. Das wird zum Problem, da Hibernate bei jeder Aktualisierung eines Tabelleneintrages anscheinend eine neues Objekt erzeugt und den Zähler von 0 auf den aktuellen Stand bringt. Dazu ruft Hibernate die set()-Methode des Zählers auf, in der was steht? Richtig, schreibe den Default-Wert in die Spalte, die ich gerade mit neuen Werten gefüllt habe. Das soll einer wissen! Solange der Zähler 0 ist und bleibt, läuft demnach alles blendend, da der Zähler ja nicht vorm Speichern in die Datenbank inkrementiert werden muss, aber wehe, der Zähler ist größer, dann geht der Spaß los.

Hab jetzt eine Methode increment() geschrieben, die den Zähler erhöht, den Default-Wert setzt, jedoch nicht automatisch von Hibernate aufgerufen wird. Nun läuft der Hase wie erwartet und ich hab wieder ein paar graue Haare mehr. Das Leben ist schön!