我在Internet上遵循一個簡單的Hibernate教程。看起來好像executeUpdate成功了(返回的行數是1)。但是,當我調用list()時,它返回了舊結果。這是休眠的預期行爲?無論如何,我可以在同一個交易中獲得更新的數據嗎?休眠executeUpdate成功,但列表操作不反映更改
這是我的源代碼:
//Prep work
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.getCurrentSession();
//Get All Employees
Transaction tx = session.beginTransaction();
Query query = session.createQuery("from Employee");
List<Employee> empList = query.list();
for(Employee emp : empList){
System.out.println("List of Employees::"+emp.getId()+","+emp.getAddress().getCity());
}
//Update Employee
query = session.createQuery("update Employee set name= :name where id= :id");
query.setParameter("name", "Pankaj Kumar");
query.setLong("id", 1);
int result = query.executeUpdate();
System.out.println("Employee Update Status="+result);
query = session.createQuery("from Employee");
empList = query.list();
for(Employee emp : empList){
System.out.println("List of Employees::"+emp.getId()+","+emp.getAddress().getCity());
}
//rolling back to save the test data
tx.rollback();
//closing hibernate resources
sessionFactory.close();
返回結果:
List of Employees::1,San Jose
List of Employees::2,Santa Clara
List of Employees::3,Bangalore
List of Employees::4,New Delhi
Hibernate: update EMPLOYEE set emp_name=? where emp_id=?
Employee Update Status=1
Hibernate: select employee0_.emp_id as emp_id1_1_, employee0_.emp_name as emp_name2_1_, employee0_.emp_salary as emp_sala3_1_ from EMPLOYEE employee0_
List of Employees::1,San Jose
List of Employees::2,Santa Clara
List of Employees::3,Bangalore
List of Employees::4,New Delhi
以及如何成功更新回滾事務? – XtremeBaumer
@Tim Biegeleisen爲什麼你使用'tx.commit();'選擇後,我認爲它應該在更新後? –
@XtremeBaumer我在閱讀OP時看不到這個要求。你能否詳細說明你的評論? –