JPA-Entities können ID-Attribute der primitiven Typen int
oder long
(u. a.) besitzen. Für diese ist der Wert 0
grundsätzlich OK. Eclipselink interpretiert in der Default-Konfiguration solche Werte jedoch als “nicht gesetzt”, was für generierte IDs eine Anforderung eines neuen Wertes bei persist
oder merge
auslöst.
Soll der Wert 0
als normaler Wert ohne die genannte Sonderbedeutung genutzt werden, muss man Eclipselink dahingehend umkonfigurieren. Dazu muss in der persistence.xml
die folgende Property eingesetzt werden:
<property name="eclipselink.id-validation" value="NULL"/>
Damit wird nur noch der Wert null
als “nicht gesetzt” interpretiert. In der Konsequenz können dann generierte ID natürlich keinen primitiven Typ haben.
Anstelle der globalen Einstellung mit Hilfe der genannten Property kann dasselbe auch pro Entity-Klasse mit Hilfe der Annotation @PrimaryKey
erreicht werden.
Weitere Details siehe Java Persistence API (JPA) Extensions Reference for EclipseLink.