1

私は現在、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ずつインクリメントします。ただし、プロセスの最後に、その挿入をコミットしたくありません。

アイデアの人はいますか?

助けていただければ幸いです。ありがとう!

4

1 に答える 1

0

テストには、Springテストフレームワークを使用します。自動トランザクションロールバックを処理します。他の何かを探している場合は、より具体的にする必要があります。あなたの質問は詳細に満ちていますが、実際に何をしたいのかについてはかなり曖昧でした。「テスト」や「デバッグ」などの単語をよく使用します。それらの言葉は、さまざまな人々にとってさまざまなことを意味する可能性があります。

于 2012-05-28T03:39:12.880 に答える