2013-06-18 164 views
1

考慮一個假設的場景,是否有一種方法可以在hibernate中使持久性實體變爲瞬態,但同時不會刪除數據庫中的行? session.delete()會使它瞬變,但同時發出數據庫的刪除SQL。製作持久實體瞬態

 //Persistant context started... 
     Session session2 = HibernateUtils.sessionFactory.openSession(); 
     session2.beginTransaction(); 

     Admin admin = (Admin) session2.load(Admin.class, 1L); 
     session2.delete(admin); 

     session2.getTransaction().commit(); 
     session2.close(); 
     //Persistant context ended... 
     ... 
     //admin now is transient but the row has been deleted, can we stop this? 

回答

0

不可以。不過,你可以使用session.evict()http://docs.jboss.org/hibernate/orm/3.6/javadocs/org/hibernate/Session.html#evict(java.lang.Object))使物體脫落。如果你將主鍵設置爲0(或其他),你可以得到有效的帶有原始字段完整副本的瞬態對象。因此,您可以執行以下操作:

Foo foo = session.get(Foo.class, 1L); 
session.evict(foo); 
foo.setID(0L); 
foo.setName("copy of original foo"); 
session.save(foo); 

然後您將得到一個帶有新名稱的foo副本。

(當涉及到關聯和級聯時要小心。)