Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- JDO / Duplicate entry exception
- PersistenceManager pm = pmf.getPersistenceManager();
- Transaction tx = pm.currentTransaction();
- try {
- tx.begin();
- Query query = pm.newQuery(Studypath.class,"studypathID == paramStudypathID");
- query.declareParameters("Integer paramStudypathID");
- query.setUnique(true);
- Studypath dbStudypath = (Studypath)query.execute(12345);
- Studypath detachedStudypath = null;
- if (dbStudypath != null) {
- detachedStudypath = (Studypath)pm.detachCopy(dbStudypath);
- } else {
- Studypath newStudypath = new Studypath();
- // ...
- pm.makePersistent(newStudypath);
- detachedStudypath = (Studypath)pm.detachCopy(newStudypath);
- }
- tx.commit();
- // now I want to add this detached studypath to my newly created course
- Course c = new Course();
- c.addStudypath(detachedStudypath);
- tx.begin();
- pm.makePersistent(c); // <== error
- tx.commit();
- }
- catch (Exception e)
- {
- //... handle exceptions
- }
- finally
- {
- if (tx.isActive())
- {
- // Error occurred so rollback the transaction
- tx.rollback();
- }
- pm.close();
- }
- @PersistenceCabable
- public class Course {
- // ...
- @Persistent
- private Set<Studypath> studypaths;
- }
- @PersistenceCabable
- public class Studypath {
- // ...
- @Persistent
- @PrimaryKey
- private Integer studypathID;
- }
- DEBUG [DataNucleus.Datastore.Native] - SELECT 'Courses.Studypath' AS NUCLEUS_TYPE, ... FROM `STUDYPATH` `A0` WHERE `A0`.`STUDYPATHID` = <12345> // this one already exists
- DEBUG [DataNucleus.Datastore.Retrieve] - Execution Time = 0 ms
- DEBUG [DataNucleus.Datastore.Retrieve] - Retrieving PreparedStatement for connection "jdbc:mysql://127.0.0.1/database, UserName=user, MySQL-AB JDBC Driver"
- DEBUG [DataNucleus.Datastore.Native] - SELECT 'Courses.Course' AS NUCLEUS_TYPE, ... FROM `COURSE` `A0` WHERE `A0`.`COURSEID` = <1111> // there is no such course, thus it gets created
- DEBUG [DataNucleus.Datastore.Retrieve] - Execution Time = 1 ms
- DEBUG [DataNucleus.Datastore.Retrieve] - Retrieving PreparedStatement for connection "jdbc:mysql://127.0.0.1/database, UserName=user, MySQL-AB JDBC Driver"
- DEBUG [DataNucleus.Datastore.Native] - INSERT INTO `COURSE` (...,`COURSEID`) VALUES (...,<1111>)
- DEBUG [DataNucleus.Datastore.Persist] - Execution Time = 1 ms (number of rows = 1)
- DEBUG [DataNucleus.Datastore.Retrieve] - Closing PreparedStatement org.datanucleus.store.rdbms.ParamLoggingPreparedStatement@3baac1b5
- DEBUG [DataNucleus.Datastore.Persist] - The requested statement "INSERT INTO `STUDYPATH` (...) VALUES (...)" has been made batchable
- DEBUG [DataNucleus.Datastore.Persist] - Batch has been added to statement "INSERT INTO `STUDYPATH` (...) VALUES (...)" for processing (batch size = 1)
- DEBUG [DataNucleus.Datastore.Persist] - Adding statement "INSERT INTO `STUDYPATH` (...) VALUES (...)" to the current batch (new batch size = 2)
- DEBUG [DataNucleus.Datastore.Persist] - Batch has been added to statement "INSERT INTO `STUDYPATH` (...) VALUES (...)" for processing (batch size = 2)
- DEBUG [DataNucleus.Datastore.Native] - BATCH [INSERT INTO `STUDYPATH` (...,`STUDYPATHID`) VALUES (...,<12345>); INSERT INTO `STUDYPATH` (...,`STUDYPATHID`) VALUES (<54321>)]
- ERROR [DataNucleus.Datastore] - Exception thrown
- c.addStudypath(dbStudypath);
Add Comment
Please, Sign In to add comment