Spring Boot 2 Hibernate сохранить не всегда коммит - PullRequest
0 голосов
/ 08 января 2019

Я обновлялся с весны 1.5 до 2 и столкнулся с этой проблемой. У меня есть следующие два контроллера с их дао. Один сохраняет в базу данных нормально, а другой нет. Весь мой конфиг это по умолчанию весна.

// UPDATE ITEM
@PreAuthorize("hasRole('ADMIN')")
@RequestMapping("/updateitem")
public String saveItem(Items item, BindingResult result) {

    if (result.hasErrors()) {
        return "error";
    }

    try {
        itemsService.createOrUpdate(item);
    } catch (DuplicateKeyException e) {
        System.out.println(e);
        return "error";
    }

    String url = "redirect:/menu/items?iditems=" + item.getIditems();

    return url;

}

@PreAuthorize("hasRole('ADMIN')")
@RequestMapping("/newextra")
public String newExtra(Items item, Extras extras, BindingResult result) {

    if (result.hasErrors()) {
        return "error";
    }

    try {
        extrasService.createOrUpdate(extras);
    } catch (DuplicateKeyException e) {
        System.out.println(e);
        return "error";
    }

    String url = "redirect:/menu/items?iditems=" + item.getIditems();

    return url;

}

// CREATE OR UPDATE ITEM
@PreAuthorize("hasRole('ADMIN')")
public void createOrUpdate(Items items) {
    Session session = entityManagerFactory.unwrap(SessionFactory.class).openSession();
    session.unwrap(Session.class).save(items);
}


@PreAuthorize("hasRole('ADMIN')")
public void createOrUpdate(Extras extras) {
    Session session = entityManagerFactory.unwrap(SessionFactory.class).openSession();
    session.unwrap(Session.class).save(extras);
}

ITEM LOG
2019-01-08 10:10:43.023 DEBUG 10228 --- [nio-8090-exec-1] o.s.web.servlet.DispatcherServlet        : POST "/updateitem", parameters={masked}
2019-01-08 10:10:43.024 DEBUG 10228 --- [nio-8090-exec-1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to public java.lang.String com.paphos.pos.controller.MenuController.updateItem(com.paphos.pos.items.Items,org.springframework.validation.BindingResult)
Hibernate: select itemsextra0_.iditemsextrascat as iditemse1_9_, itemsextra0_.idextrascat as idextras2_9_, itemsextra0_.iditems as iditems3_9_ from itemsextrascat itemsextra0_ where itemsextra0_.iditems=0 order by itemsextra0_.idextrascat asc
Hibernate: select categories_.idcategories, categories_.name as name2_3_ from categories categories_ where categories_.idcategories=?
Hibernate: insert into items (idcategories, description, hidden, name, price, upc) values (?, ?, ?, ?, ?, ?)
2019-01-08 10:10:43.054 DEBUG 10228 --- [nio-8090-exec-1] o.s.web.servlet.DispatcherServlet        : Completed 302 FOUND


EXTRAS LOG
2019-01-08 09:54:24.316 DEBUG 10228 --- [nio-8090-exec-4] o.s.web.servlet.DispatcherServlet        : POST "/newextra", parameters={masked}
2019-01-08 09:54:24.316 DEBUG 10228 --- [nio-8090-exec-4] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to public java.lang.String com.paphos.pos.controller.MenuController.newExtra(com.paphos.pos.items.Items,com.paphos.pos.extras.Extras,org.springframework.validation.BindingResult)
Hibernate: select extrascat_.idextrascat, extrascat_.description as descript2_7_, extrascat_.name as name3_7_ from extrascat extrascat_ where extrascat_.idextrascat=?
2019-01-08 09:54:24.356 DEBUG 10228 --- [nio-8090-exec-4] o.s.web.servlet.DispatcherServlet        : Completed 302 FOUND

Создание новых предметов работает, но создание новых дополнений - нет. Он запускает запрос на выборку таблицы, но ничего не вставляет. Есть идеи? Я считаю, что это может иметь отношение к транзакциям. У меня есть занятия с @Transactional из весенних рамок.

UPDATE Я получаю ошибку транзакции при попытке запустить удаление. javax.persistence.TransactionRequiredException: при выполнении запроса на обновление / удаление, но, просматривая мои журналы, мой менеджер транзакций работает

1 Ответ

0 голосов
/ 09 января 2019

Посмотрев на различия в моем коде, я нашел свою ошибку. Для моего объекта Extras у меня не было аннотации @GeneratedValue, и это вызывало проблему. Вам нужна эта аннотация, даже если для вашей таблицы установлено автоматическое увеличение, что раньше не имело место. Странно, что я не получил ошибку для этого, потому что, если у вас есть аннотация без автоматического увеличения в db, чем вы получаете ошибку для идентификатора .. Я использую mysql btw

...