Hibernate Pitfalls

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…

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s