我从1.5春季更新到2,遇到了这个问题。我将以下两个控制器与dao一起使用。一种保存到数据库很好,而另一种则没有。我所有的配置都是默认的spring。
// 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
创建新项目有效,但是创建新附加项目则无效。它在表上运行选择查询,但不插入任何内容。有任何想法吗?我相信这可能与交易有关。我有来自Spring框架的@Transactional类。
更新 尝试运行删除操作时出现交易错误。 javax.persistence.TransactionRequiredException:执行更新/删除查询,但是查看我的日志,我的事务管理器正在运行
答案 0 :(得分:0)
环顾四周代码中的差异后,我发现了自己的错误。对于我的Extras对象,我没有@GeneratedValue批注,这引起了问题。即使您的表设置为自动递增(以前不是这种情况),也需要此注释。奇怪的是,我没有收到错误消息,因为如果您在db中没有设置自动增量的注解,那么您将获得id的错误。.我正在使用mysql btw