Solution: “Temporary ID hasn’t been replaced on commit” when using Cayenne
Problem
When committing changes to a Cayenne context, you get an exception like the following.
org.apache.cayenne.CayenneRuntimeException:
(v.3.0.1 Sep 06 2010 15:09:38)
Temporary ID hasn't been replaced on commit
Cause
You are trying to commit an object for which Cayenne does not know how to generate a permanent id. This in turn typically happens when the underlying table has no primary key defined.
Solution
To solve the problem, do one of the following.
- Add a primary key to the underlying table, either a surrogate key (new generated id column) or a natural key (combination of existing columns).
- Set your own
ObjectIDon the object(s) in question using thePersistentObject.setObjectID()method.