单元测试@Transactional - 无法提交JPA事务;事务标记为仅回滚

时间:2016-03-26 17:54:57

标签: java spring hibernate jpa transactions

我正在为我的Spring应用程序编写JUnit测试。对于其中一个场景我得到了异常

node -v

我已经阅读了其他一些问题和答案,但他们没有帮助。我遇到问题的情况非常简单。我想检查实体字段的唯一约束是否被强制执行。我创建了两个具有相同字段的实体,并期望出现约束违例异常。调用方法标记为Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly.,因为如果发生异常,我希望整个事件回滚。

这是代码:

@Transactional

调用UserHelper类:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = DeadlinesApplication.class)
@Rollback(value = false)
public class UserHelperTest {
    @Autowired
    private UserHelper userHelper;

    @Test(expected = DataIntegrityViolationException.class)
    @Transactional
    public void uniqueUsername() throws NullParameterException {
        User user = userHelper.createUser("uniq1", "password", null, null);
        User user2 = userHelper.createUser("uniq2", "password", null, null);
        User user3 = userHelper.createUser("uniq2", "password", null, null);
    }

UserDAO的@Service public class UserHelper { @Autowired private UserDAO userDAO; public User createUser(...) throws NullParameterException { User newUser = new User(username, ...); userDAO.save(newUser); return newUser; } 方法随后在save()上调用save()

UserRepository

@Repository public interface UserRepository extends CrudRepository<User, Long> { public User findByUsername(String username); } 唯一的地方是测试方法。它需要在那里,因为在一个单独的测试方法中,我懒惰加载多对多关系,并且需要在一个事务中发生。

你能看到这段代码有什么问题吗?

编辑:错误堆栈跟踪

@Transactional

0 个答案:

没有答案