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

Popular posts from this blog

windows - Single EXE to Install Python Standalone Executable for Easy Distribution -

c# - Access objects in UserControl from MainWindow in WPF -

javascript - How to name a jQuery function to make a browser's back button work? -