如何正确使用Spring JPA clearAutomatically?

时间:2013-02-07 06:31:06

标签: spring spring-data-jpa

当我使用Spring JPA时遇到问题。我想写下更新SQL如下:

@Modifying
@Query("update Account as a set a.status = ?1 where a.id in (?2)")
public int updateStatus(ACCOUNT_STATUS status, List<Long> id);

然后我写了一些测试来测试它。

private List<Account> createAccounts() {

    List<Account> accounts = new ArrayList<>();

    Account account1 = new Account();

    account1.setCaseNumber("999123");
    account1.setAccountNbr("888123");
    account1.setCaseType(CASE_TYPE.REGULAR);
    account1.setStatus(ACCOUNT_STATUS.NOT_USED);

    accountRepository.save(account1);

    Account account2 = new Account();

    account2.setCaseNumber("999456");
    account2.setAccountNbr("888456");
    account2.setCaseType(CASE_TYPE.REGULAR);
    account2.setStatus(ACCOUNT_STATUS.NOT_USED);

    accountRepository.save(account2);

    Account account3 = new Account();

    account3.setCaseNumber("999789");
    account3.setAccountNbr("888789");
    account3.setCaseType(CASE_TYPE.DISASTER);
    account3.setStatus(ACCOUNT_STATUS.NOT_USED);

    accountRepository.save(account3);

    accounts.add(account1);
    accounts.add(account2);
    accounts.add(account3);

    return accounts;
}

@Test
public void testUpdateAccountStatus() {

    List<Long> ids = new ArrayList<>();

    List<Account> accounts = createAccounts();

    for (Account account : accounts) {
        ids.add(account.getId());
    }

    int count = accountRepository.updateStatus(ACCOUNT_STATUS.USED, ids);

    Assert.assertEquals(ids.size(), count);

    for (Long id  : ids) {
        Account account = accountRepository.findOne(id);
        Assert.assertEquals(ACCOUNT_STATUS.USED, account.getStatus());
    }
}

测试失败,因为状态未更改。但实际上更新SQL运行良好。帐户状态已更改。

测试可以通过两种方式传递。 如果我将accountRepository.findOne()调用到数据库中的现有帐户(此处,在测试代码中,在测试开始之前插入所有帐户记录,请参阅createAccounts方法)

或者,如果我添加@Modifying(clearAutomatically = false),一切看起来都不错。

我在Spring网站上查看了关于clearAutomatically的文档。但我仍然无法理解我的代码行为。

My Spring-JPA版本为1.1.0,已将clearAutomatically默认值更改为true。

有没有人对Spring JPA了解太多?

谢谢

1 个答案:

答案 0 :(得分:0)

可能是因为您使用此属性的默认值已更改。

请参阅相关文档问题:https://jira.springsource.org/browse/DATAJPA-305