跳到主要内容

使用

DeepSeek V3 中英对照 Usage

你现在可以使用 RevisionRepository 中的方法来查询实体的修订版本,如下面的测试用例所示:

@ExtendWith(SpringExtension.class)
@Import(EnversDemoConfiguration.class) 1
class EnversIntegrationTests {

final PersonRepository repository;
final TransactionTemplate tx;

EnversIntegrationTests(@Autowired PersonRepository repository, @Autowired PlatformTransactionManager tm) {
this.repository = repository;
this.tx = new TransactionTemplate(tm);
}

@Test
void testRepository() {

Person updated = preparePersonHistory();

Revisions<Long, Person> revisions = repository.findRevisions(updated.id);

Iterator<Revision<Long, Person>> revisionIterator = revisions.iterator();

checkNextRevision(revisionIterator, "John", RevisionType.INSERT);
checkNextRevision(revisionIterator, "Jonny", RevisionType.UPDATE);
checkNextRevision(revisionIterator, null, RevisionType.DELETE);
assertThat(revisionIterator.hasNext()).isFalse();

}

/**
* Checks that the next element in the iterator is a Revision entry referencing a Person
* with the given name after whatever change brought that Revision into existence.
* <p>
* As a side effect the Iterator gets advanced by one element.
*
* @param revisionIterator the iterator to be tested.
* @param name the expected name of the Person referenced by the Revision.
* @param revisionType the type of the revision denoting if it represents an insert, update or delete.
*/
private void checkNextRevision(Iterator<Revision<Long, Person>> revisionIterator, String name,
RevisionType revisionType) {

assertThat(revisionIterator.hasNext()).isTrue();
Revision<Long, Person> revision = revisionIterator.next();
assertThat(revision.getEntity().name).isEqualTo(name);
assertThat(revision.getMetadata().getRevisionType()).isEqualTo(revisionType);
}

/**
* Creates a Person with a couple of changes so it has a non-trivial revision history.
* @return the created Person.
*/
private Person preparePersonHistory() {

Person john = new Person();
john.setName("John");

// create
Person saved = tx.execute(__ -> repository.save(john));
assertThat(saved).isNotNull();

saved.setName("Jonny");

// update
Person updated = tx.execute(__ -> repository.save(saved));
assertThat(updated).isNotNull();

// delete
tx.executeWithoutResult(__ -> repository.delete(updated));
return updated;
}
}
java
  • 这里引用了之前介绍的应用程序上下文配置(在 配置 部分)。

更多资源

你可以在 Spring Data Examples 仓库 中下载 Spring Data Envers 示例,并通过实际操作来感受该库的工作方式。

你还应该查看 RevisionRepository 的 Javadoc 以及相关类。

Spring Data Envers 的源代码和问题跟踪器托管在 GitHub 上(作为 Spring Data JPA 的一个模块)。