При сохранении записи в Бд постоянно происходят rollback. Вижу, что сущность сохранилась(получаю ее id). Но в базе этой сущности не оказывается. Может я как-то не так использую аннотацию @Transactional?
Dao:
public abstract class AbstractDao<T extends BaseEntity> implements BaseDao<T>{
protected static HibernateUtils utils = HibernateUtils.getInstance();
public long save(T entity) {
Session session = utils.getSession();
long id = (long) session.save(entity);
return id;
}
Service:
@Service
@Transactional(rollbackFor = DaoException.class)
public class BillServiceImpl implements BillService {
@Autowired
private BillDaoImpl billDao;
@Override
public long save(Bill entity) {
try {
return billDao.save(entity);
} catch (DaoException dao) {
throw new ServiceException();
}
}
}
Web:
@RestController
public class AppController {
@Autowired
private BillService billService;
@RequestMapping("/billsave")
public void billsave(ModelAndView modelAndView){
Bill bill = new BillBuilder
.BillEntityBuilder()
.password("1234567890")
.build();
long id = billService.save(bill);
System.out.println(id);
}
}
Есть такое понятие - Container-Managed Transactions (CMT). Оно описывает процесс управления работой с БД, при котором контейнер, в котором работает ваше приложение (например, сервер приложений или фреймворк Spring), осуществляет контроль действий с БД - выдача вашему приложению соединений с БД, управление транзакциями и прочее. Аннотация @Transactional "работает" только если у вас настроено и используется CMT.
Наличие этой строчки - Session session = utils.getSession() - говорит о том, что скорее всего, ваше приложение само осуществляет процесс создания соединения с БД. В таких случаях контейнер не контролирует действия, выполняемые с полученным соединением с БД (сессией), а аннотация @Transactional игнорируется. Вам следует либо явно подтверждать завершение транзакции вызовом соответствующего метода, либо разбираться с настройкой CMT в вашем проекте.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости