如何通过Spring集成测试获得Hibernate Envers?

如何通过Spring集成测试获得Hibernate Envers?,spring,hibernate,hibernate-envers,Spring,Hibernate,Hibernate Envers,是否有办法让Hibernate Envers在调用保存或更新时立即运行,而不是在事务结束时运行? 我有一个@Transactional注释(有效的端到端测试)。由于代码不包含测试方法,我无法在其中添加“flush”或其他内容(除了编辑非测试代码之外,这不是我想要的) 我不知道如何让Envers日志处理这些呼叫。我需要它在运行时使用Envers audit表检查旧条目,并希望为该功能创建测试用例。 我有以下用于单元测试的代码: @RunWith(SpringJUnit4ClassRunner.cl

是否有办法让Hibernate Envers在调用保存或更新时立即运行,而不是在事务结束时运行?

我有一个
@Transactional
注释(有效的端到端测试)。由于代码不包含测试方法,我无法在其中添加“flush”或其他内容(除了编辑非测试代码之外,这不是我想要的)

我不知道如何让Envers日志处理这些呼叫。我需要它在运行时使用Envers audit表检查旧条目,并希望为该功能创建测试用例。

我有以下用于单元测试的代码:

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration("/src/webapp")
@EnableWebMvc
@Transactional
@TestPropertySource(locations= {"classpath:/config/common.properties"}, properties = {"..."})
@ContextConfiguration(locations = {"..."})
public class Test {
    @Autowired
    private WebApplicationContext wac;

    @Autowired
    private UserDetailsService detailsService;

    private MockMvc mockMvc;

    @Before
    public void setup() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac)
            .build();
    }

    ...
}

我认为这个答案最多能帮助你找到解决方案

应以以下方式修改您的类:

注意:在类级别避免@Transactional。总是追求 方法级别


我添加了一个有用的资源来帮助您理解。检查

我认为这个答案最多能帮助您获得解决方案

应以以下方式修改您的类:

注意:在类级别避免@Transactional。总是追求 方法级别


我添加了一个有用的资源来帮助您理解。检查

是否使用spring启动应用程序?你能添加你的代码,因为这将有助于获得你的解决方案吗?好的。我知道你在使用spring启动应用程序吗?你能添加你的代码,因为这将有助于获得你的解决方案吗?好的。我看到了
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration("/src/webapp")
@EnableWebMvc
@TestPropertySource(locations= {"classpath:/config/common.properties"}, properties = {"..."})
@ContextConfiguration(locations = {"..."})
public class Test {

    @Autowired
    private WebApplicationContext wac;

    @Autowired
    private UserDetailsService detailsService;

    private MockMvc mockMvc;

    @Before
    public void setup() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac)
            .build();
    }

    // example
    @Test
    @Transactional
    @Rollback(true)
    public void testAddUserDetails()
    {
        // code
    }
    ...
}