java - How to know an object has changed compared to database -
i need know if fields of model object has been changed before save because need compare new values old ones.
i can't touch model classes generated.
my problem whenever change object in controller , check database have object stored before save modified object, returned object database "same" modified object.
i'm using play! 1.2.7 , have :
class mymodel extends model { public string label; } class mymodels extends controller { public static void save(long id) { mymodel m = mymodel.findbyid(id); // @ point m.label "original" m.label = "changed !"; mymodel m2 = mymodel.findbyid(id); // m2.label "changed !" should "original", shouldn't ? } } maybe question : how force jpa entitymanager database real instead of returning object context ? seems real problem here.
solution
so final solution :
class mymodels extends controller { public static void save(long id) { mymodel m = mymodel.findbyid(id); // @ point m.label "original" m.label = "changed !"; mymodel m2; jpaplugin.starttx(false); try { m2 = mymodel.findbyid(id); m2.label "original" } { jpaplugin.closetx(false); } } } also way achieve create new entitymanager :
entitymanager manager = jpa.entitymanagerfactory.createentitymanager(); // set new entitymanager like... manager.setproperty("org.hibernate.readonly", true); query q = manager.createquery("select m mymodel m id = :id"); q.setmaxresults(1); q.setparameter("id", m.getbaseid()); mymodel m2 = (mymodel) q.getresultlist().get(0);
to force hibernate start new transaction in playframework , give new entity manager return object in database , not reference it, need ask play framework start new transaction through jpaplugin.
jpaplugin.starttx(false); try { // code } { jpaplugin.closetx(false); }
Comments
Post a Comment