2017-04-15 93 views
0

我不明白爲什麼Spring @Transactional測試方法Hibernate沒有回滾在@Before中所做的更改?有information@Before@Test在一個事務中被調用。所有上下文都可以考慮配置。用`.createSQLQuery`截斷後彈簧/休眠不回滾事務

@Test 
@RunWith(SpringJUnit4ClassRunner.class) 
@Transactional(defaultRollback = true, transactionManager = "transactionManager") 
public class TestClass { 

    @Autowired 
    private SessionFactory sessionFactory; 

    @Autowired 
    private EntityDao entityDao; 

    @Before 
    public void before() { 
     // create arbitrary entity 
     Entity one = Utils.createEntity(); 
     // save with HibernateDao to table_1 
     entityDao.save(one); 
    } 

    @Test 
    public void test() { 
     sessionFactory.getCurrentSession().createSQLQuery("TRUNCATE table_2").executeUpdate(); 
    } 
} 

沒有createSQLQuery().executeUpdate如需要@Before所有的改變都rollbacked。

+0

哪些DBMS您使用的?並非所有人都支持事務TRUNCATE –

+0

我使用的是mysql,據說['Truncate操作導致隱式提交,因此無法回滾](https://dev.mysql.com/doc/refman/ 5.7/EN /截短table.html)。你能通過手勢來解釋爲什麼有些dbms不支持事務截斷嗎?我想知道在這種情況下會發生什麼。 –

回答