なぜSpring @Transactional
のテストメソッドがHibernateによって@Before
で行われた変更をロールバックしないのか理解できませんか? 1つのトランザクション内で@Before
と@Test
が呼び出されるinformationがあります。すべてのコンテキストが構成されているとみなされる可能性があります。必要に応じて@Before
内のすべての変更がロールバックされ`.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
なければ
?それらのすべてがトランザクションのTRUNCATEをサポートするわけではありません。 –
私はmysqlを使用していますが、[操作を切り捨てると暗黙のコミットが発生するため、ロールバックできません。](https://dev.mysql.com/doc/refman/ 5.7/ja/truncate-table.html)。ジェスチャーを使用して、一部のdbmsがトランザクション・トランケートをサポートしていないという問題がある理由を説明できますか?私はこの場合どのように起こるか知りたいです。 –