私は現在、Spring + Hibernateの統合を学習しており、これまでのところ、それを機能させるようにしています。しかし、テストとデバッグの目的で生成されたSQLステータスを確認したいだけなので、プロセスの最後にトランザクションをコミットしたくないという状況に遭遇しました。
すでに休止状態のプロパティにfalseを追加しましたが、それでも機能しません。
Springを使用してHibernateトランザクションを処理する場合、達成することは可能ですか?Hibernateで従来のトランザクションを使用する場合は可能であるため、session.commit()メソッドを呼び出さないでください。そうすると、すべての更新と挿入が保存されません。
現在、サービスレイヤー用に次のコードがあります。
@Transactional(propagation = Propagation.SUPPORTS、readOnly = true)public class EmployeeServiceImpl {
@Autowired
private EmployeeDao employeeDao
@Transactional(propagation = Propagation.REQUIRED, readOnly = false)
public void saveEmployee(Employee employee){
// count the number of employee in the database
int n = employeeDao.getEmployeeCount();
// lets say it should print 10 here
System.out.println("number of employee before inserting : " + n);
// insert to employee
employeeDao.saveEmployee(employee);
// then count the employee after inserting
n = employeeDao.getEmployeeCount();
// then it should print 11 here after inserting new employee
System.out.println("number of employee after inserting : " + n);
/* Then Dont commit insert!!!
*/
}
}
Daoレイヤーのコード:
public EmployeeDaoImpl implements EmployeeDao{
@Autowired
public void saveEmployee(Employee employee){
sessionFactory.getCurrentSession.save(employee);
}
public int getEmployeeCount(){
String count = sessionFactory.getCurrentSesion.createQuery("select count(emp.employeeId) from Employee emp")
.list().get(0).toString;
return Integer.valueOf(count);
}
}
しかし、ここで起こることは、トランザクションをコミットすることです!しかし、テストとデバッグの目的のためだけにトランザクションをコミットしたくありません。
@Transactional(propagation = Propagation.SUPPORTS、readOnly = true)の代わりに@Transactional(propagation = Propagation.SUPPORTS、readOnly = false)も試しました
ただし、ここで発生するのは、トランザクションをコミットしないことですが、従業員の数も増加しません。
したがって、ここで発生することを期待しているのは、従業員テーブルに挿入する前に従業員の数をカウントすることです。次に、employeeテーブルに挿入し、employeeの数を再度カウントして、1ずつインクリメントします。ただし、プロセスの最後に、その挿入をコミットしたくありません。
アイデアの人はいますか?
助けていただければ幸いです。ありがとう!