我从Spring1.5更新到了2,遇到了这个问题。我有以下两个控制器和它们的DAO。一个可以保存到数据库,另一个不能。我所有的配置都是默认的弹簧。
// 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
创建新项目有效,但创建新的附加项无效。它对表运行select查询,但不插入任何内容。有什么想法吗?我相信这可能与交易有关。我的类有Spring框架中的@Transactional。
更新
尝试运行删除时,我收到一个事务错误。
javax.persistence.transactionRequiredException:执行更新/删除查询,但查看我的日志,我的事务管理器正在运行