0

我在使用 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() 调用到数据库中的现有 Account (这里,在测试代码中,所有 Account 记录都在测试开始之前插入,请参见 createAccounts 方法)

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

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

我的 Spring-JPA 版本是 1.1.0,它已将 clearAutomatically 默认值更改为 true。

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

谢谢

4

1 回答 1

0

该属性的默认值可能在您使用后发生了变化。

请参阅他们似乎仍然存在的文档问题:https ://jira.springsource.org/browse/DATAJPA-305

于 2013-06-17T08:56:43.320 回答