3

add()で注釈が付けられたというサービスメソッドがあり@Transactionalます。

私はそれを呼び出しますが、対応するDAOメソッド内でConstraintViolationExceptionが発生すると、指定しない場合でもトランザクションをロールバックします。

ConstraintViolationExceptionキャッチされ、その代わりにNotFoundExceptionチェック例外がスローされることを期待しています。

@Override
@Transactional(noRollbackFor = ConstraintViolationException.class)
public User add(User user) throws NotFoundException {
    try {
        result = userDao.add(user);
    } catch (RuntimeException e) {
        throw new NotFoundException("Couldn't find group");
    }
}

ConstraintViolationExceptionトランザクションのロールバックなしでキャッチする方法はありますか?

Spring3.1.1とHibernate3.6を使用しています。

4

1 に答える 1

4

ああ、どうなるかわかります。add()ConstraintViolationExceptionは、メソッドが実行された後、メソッドの周囲のトランザクションインターセプターがトランザクションをコミットしようとしたときに、コミット時に発生します。コミットできないため、明らかに、トランザクションはロールバックされます。それは他に何もできません。

于 2012-12-08T15:43:03.817 に答える