[英]What I am missing here (Hibernate begin transaction)
我有一個測試課:
class SomeTest {
public static void main(String args[]){
Client kom = new Client();
kom.setId(kom.newID());
kom.setClient("OldName");
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(kom); // I think insert is here ?
Query q = session.createSQLQuery(" call change_name(:old, :new) ");
q.setParameter("old","OldName");
q.setParameter("new","NewName");
int result = q.executeUpdate();
session.getTransaction().commit();
}
};
和數據庫存儲過程change_name進行客戶端名稱的更新..每次運行測試時,我都有一條帶有舊名稱的記錄? 我希望更新是在同一事務中執行的,並且我永遠都不會看到舊名稱?
JB Nizet有正確答案。
save()不會插入。 它將對象與會話相關聯。 插入查詢在下一次刷新時執行。 因此,在調用存儲的proc之前,顯式調用flush。 –昨天,JB Nizet
還有FlushMode ...我總是設置為。 我調用了許多程序來更改數據庫中的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.