Nehmen wir an wir hätten eine Klasse Activity, die u.a. ein Attribut Duration hat, das die Dauer in Sekunden als Quantity Second angibt. Wenn man nun die Mapping Datei folgendermassen gestaltet:
<hibernate-mapping default-lazy="false"> <class name="Activity" table="activity">
...
<property name="duration" column="duration" type="double" not-null="true"/> </class> </hibernate-mapping>
scheint alles ok zu sein. Hibernate findet sein Attribut und seine Setter und Getter. Also los! Das grosse Stirnrunzeln kommt dann beim Starten des Programms (bzw beim Speichern der Activities in die Datenbank):
java.sql.SQLException: Attempt to insert null into a non-nullable column:
column: DURATION table: ACTIVITY in statement [...]
Hmmm… also erstmal den Debugger anschmeissen und der sagt einem duration ist nicht null, ist doch alles ok, aber warum meckert dann hibernate?
Die Lösung ist ganz einfach: hibernate kann den Rückgabewert der getter Methode nicht als double interpretieren und nimmt daher null an, anstelle zu melden, dass die getter Methode den falschen Rückgabetyp hat. Sinnvolle Fehlermeldungen könnten manchmal die Fehlersuche wirklich verkürzen…