で使用Spring 3.1.2
していHibernate 4
ます。
例外変換が有効になるように、MyDaoImpl
注釈が付けられたDAO実装クラスがあります。次のように注釈が付けられ@Repository
たサービスクラスがあります。MyService
@Transactional
public class MyDaoImpl implements MyDao {
private SessionFactory sessionFactory;
@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
public void saveA(A a)
{
this.sessionFactory.getCurrentSession().saveOrUpdate(a);
}
}
私は次のようにユニットテストクラスMyDaoImplTest
を作成しました。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:beans.xml" })
@Transactional
public class MyDaoImplTest implements IMyDaoImplTest {
private MyDao myDao;
private SessionFactory sessionFactory;
@Autowired
public void setMyDao(MyDao myDao)
{
this.myDao = myDao;
}
@Autowired
public void setSessionFactory(SessionFactory sessionFactory)
{
this.sessionFactory = sessionFactory;
}
@Test
@Override
public void testCreateA()
{
A a = new A("A1");
this.myDao.saveA(a);
this.sessionFactory.getCurrentSession().flush();
IDataSet databaseDataSet = this.getConnection().createDataSet();
ITable actualTable = databaseDataSet.getTable("Applications");
IDataSet expectedDataSet = new FlatXmlDataSetBuilder().build(this.getClass().getClassLoader().getResourceAsStream("test-data/applications/savenew.xml"));
ITable expectedTable = expectedDataSet.getTable("Applications");
Assertion.assertEquals(expectedTable, actualTable);
}
}
Springのドキュメントによると、誤検知を避けるために、変更後にセッションをフラッシュします。問題は、フラッシュした後、Hibernateの外部で(たとえばDBUnitを使用して)DBにアクセスすると、変更が表示されないため、アサートが常に失敗することです。
私の設定の何が問題になっていますか?