Sto scrivendo i test di integrazione e in un metodo di prova vorrei scrivere alcuni dati su DB e quindi leggerlo.Imposta la modalità flush della sessione di sospensione in primavera
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
@TransactionConfiguration()
@Transactional
public class SimpleIntegrationTest {
@Resource
private DummyDAO dummyDAO;
/**
* Tries to store {@link com.example.server.entity.DummyEntity}.
*/
@Test
public void testPersistTestEntity() {
int countBefore = dummyDAO.findAll().size();
DummyEntity dummyEntity = new DummyEntity();
dummyDAO.makePersistent(dummyEntity);
//HERE SHOULD COME SESSION.FLUSH()
int countAfter = dummyDAO.findAll().size();
assertEquals(countBefore + 1, countAfter);
}
}
Come si può vedere tra la memorizzazione e la lettura dei dati, la sessione deve essere lavata perché il valore predefinito è FushMode
AUTO
quindi i dati non possono essere effettivamente memorizzati nel DB.
Domanda: Posso in qualche modo impostare FlushMode
-ALWAYS
in fabbrica di sessione o da qualche altra parte per evitare di ripetere session.flush()
chiamata?
Tutte le chiamate DB in DAO vanno con l'istanza HibernateTemplate
.
Grazie in anticipo.
Si può avere Spring iniettare 'SessionFactory' nel test, e nel' setUp' ottenere l'attuale 'Session' e chiamare' setFlushMode() 'su di esso? –