java - Updating a Hibernate entity via an EventListener -


i'm using preinsert , preupdate eventlisteners in hibernate set value of "created" , "updated" timestamps prior writing entity database. problem next time hibernate reads flushes entity hibernate sees changed timestamps , thinks object needs updated if nothing else changed. listeners fired again, update occurs, , same on , over.

ideally i'd able assign these timestamps without hibernate thinking object dirty next time flushed. best solution handling this? assume override dirty check, wanted see others do.

here's example code reference (this sample code no need nitpick):

@entity class myentity {     @id     long id = long.valueof(1);     @temporal(temporaltype.timestamp)     private date created;     @temporal(temporaltype.timestamp)     private date updated;      @override     public void setcreated(date created) {         this.created = created;     }      @override     public void setupdated(date updated) {         this.updated = updated;     } }  public class preinsertandupdateeventlistener implements preinserteventlistener, preupdateeventlistener {     @override     public boolean onpreupdate(preupdateevent event) {         myentity.class.cast(event.getentity()).setupdated(new date());         return false;     }      @override     public boolean onpreinsert(preinsertevent event) {         myentity.class.cast(event.getentity()).setcreated(new date());         return false;     } }  public void updatedtest() {     session session = sessionfactory.opensession();     transaction t = session.begintransaction();      myentity p = new myentity();     serializable id = session.save(p);     session.flush();      (int = 0; < 5; i++) {         p = (myentity) session.get(myentity.class, id);         session.update(p);         session.flush(); // update fires here     }      t.commit();     session.close(); } 

the solution decided take update hibernate's state match of entity each time modify entity via event listener. implementation looks this:

standardproperty[] properties = event.getpersister().getentitymetamodel().getproperties(); object[] state = event.getstate();  (int = 0; < properties.length; i++) {     if (properties[i].getname().equals("updated")) {         state[i] = timestamp;         break;     } } 

Comments

Popular posts from this blog

apache - Add omitted ? to URLs -

redirect - bbPress Forum - rewrite to wwww.mysite prohibits login -

php - How can I stop spam on my custom forum/blog? -