У меня есть простая база данных с одной таблицей транспортных средств (с использованием MySQL):
create table vehicle (
vehicle_no varchar(10) not null,
color varchar(10),
wheel int,
seat int,
primary key (vehicle_no)
) engine = InnoDB;
В Java у меня есть объект DAO, который должен запрашивать все транспортные средства (другие методы DAO опущены).Этот DAO должен присоединиться к существующей транзакции или создать новую при необходимости:
@Transactional(propagation=Propagation.REQUIRED, readOnly=false)
public class HibernateVehicleDao implements VehicleDao {
private SessionFactory sessionFactory;
@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
public List<Vehicle> findAll() {
return currentSession().createQuery("from Vehicle").list();
}
}
Теперь я написал тест JUnit (JUnit4) для DAO.Перед запуском метода испытаний он должен добавить 10 баз данных в базу данных, а после запуска удалить все машины.Я отдельно протестировал это поведение с Spring JDBC, и все работает правильно, поэтому проблем не должно быть.
@ContextConfiguration(locations = "/sk/xorty/dataaccess/dataaccess-beans.xml")
public class HibernateVehicleDaoTest extends AbstractTransactionalJUnit4SpringContextTests {
private static final int COUNT = 10;
@Autowired
@Qualifier("hibernateVehicleDao")
private VehicleDao dao;
@Before
public void setUp() {
String insert =
"INSERT INTO VEHICLE (VEHICLE_NO, COLOR, WHEEL, SEAT) VALUES (?, ?, ?, ?)";
List<Object[]> argsList = new ArrayList<>();
for (int i = 0; i < COUNT; i++) {
argsList.add(VehicleUtil.nextVehicleArgs());
}
simpleJdbcTemplate.batchUpdate(insert, argsList);
}
@After
public void tearDown() {
simpleJdbcTemplate.update("DELETE FROM VEHICLE", (Object[]) null);
}
@Test
public void testFindAll() {
assertEquals (COUNT, dao.findAll().size());
}
}
Все загружается, поэтому я подозреваю, что конфигурация правильная и зависимости былиправильно введен.
Проблема в , этот тест не пройден, потому что база данных пуста (нет транспортных средств).Когда я вставляю их вручную, они никогда не удаляются с другой стороны.
Пожалуйста, попробуйте обратить внимание на использование транзакционных аннотаций , я довольно новичок в этом и думаю, что могошибка где-то там.
Вот мой файл конфигурации бина, если это может помочь*