Dienstag, 12. April 2011

Bug in JPA beim Umgang mit leeren Listen

In den letzten Tagen haben wir ein wenig mit JPA und der Persistierung gekämpft. Wir bekamen beim abspeichern eine "org.eclipse.persistence.exceptions.QueryException"-Exception, mit der Beschreibung: "Exception Description: The list of fields to insert into the table [DatabaseTable()] is empty. You must define at least one mapping for this table."

Nach einigem Suchen habe ich im Glassfish-Bugtracker einen Hinweis auf diese Exception gefunden. Aller Vermutung nach handelt es sich tatsächlich um einen Bug in eclipselink. In den Kommentaren des Bugtrackers jedoch fand sich auch ein Hinweis, wie man diesen Bug umgehen könnte, obwohl dies vermutlich keine Optimale Lösung darstellt.

In den Entity-Klassen hatten wir zur Definition der IDs die Annotation @GeneratedValue mit der Option "strategy=GenerationType.IDENTITY" benutzt. Diese Stategy-Angabe ruft offensichtlich den Fehler hervor. Nachdem wir diese Option entfernt haben, sprich nur noch die Annotation @GeneratedValue ohne weitere Angaben benutzen, kam der Fehler nicht mehr zum Vorschein.