java - How to move entity from one database to another using openjpa? -
i trying move entity objects 1 database without success. example code:
entitymanagerfactory emffrom = persistence.createentitymanagerfactory(frompu); entitymanager emfrom = emffrom.createentitymanager(); entitymanagerfactory emfto = persistence.createentitymanagerfactory(topu); entitymanager emto = emfto.createentitymanager(); //code create sql example 'select row order row' order entity query q = emfrom.createquery(sql); for(object o: q.getresultlist()) { emfrom.detach(o); emto.persist(entity); }
this results in:
exception in thread "main" >org.apache.openjpa.persistence.entityexistsexception: attempt persist detached object "order-1". if new instance, make sure version and/or auto-generated primary key fields null/default when persisting. failedobject: order-1 @ org.apache.openjpa.kernel.brokerimpl.persistinternal(brokerimpl.java:2628) @ org.apache.openjpa.kernel.brokerimpl.persist(brokerimpl.java:2571) @ org.apache.openjpa.kernel.brokerimpl.persist(brokerimpl.java:2554) @ org.apache.openjpa.kernel.brokerimpl.persist(brokerimpl.java:2458) @ org.apache.openjpa.kernel.delegatingbroker.persist(delegatingbroker.java:1077) @ org.apache.openjpa.persistence.entitymanagerimpl.persist(entitymanagerimpl.java:716)
i have tried use merge instead of persist no rows saved in database. have tried set id field null using reflection (since private) this:
field f = o.getclass().getdeclaredfield("id"); f.setaccessible(true); f.set(o, null);
but no luck. have not been able set version field null since long while id filed long. dont know if help.
i using java 7 , openjpa 2.2. ideas on how move entities great. thanks.
you're confusing jpa provider because have wrapped entity in proxy information detailing kind of state relative database (e.g. knows loaded , hasn't been amended) calling 'save' using different underlying database won't make sense.
you need create copy of object (essentially field field) , persist jpa provider thinks insert, not update.
now might don't want copy every field - error prone , take while. trick convert json out again new object.
have @ googles gson:
<dependency> <groupid>com.google.code.gson</groupid> <artifactid>gson</artifactid> <version>2.2.4</version> </dependency>
for example:
final someentity oldinstance = new someentity("hello"); final gson gson = new gson(); final string json = gson.tojson(oldinstance); final someentity newinstance = gson.fromjson(json, oldinstance.getclass());
you'll need getters/setters , non-final fields doing json librarys use reflection on class, otherwise you'll have hand-code kind of copy constructor or builder field field
Comments
Post a Comment