代码之家  ›  专栏  ›  技术社区  ›  Marios

Spring Boot 2 Hibernate保存不总是提交

  •  0
  • Marios  · 技术社区  · 6 年前

    我从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:执行更新/删除查询,但查看我的日志,我的事务管理器正在运行

    1 回复  |  直到 6 年前
        1
  •  0
  •   Marios    6 年前

    在查看了代码中的差异之后,我发现了我的错误。对于我的Extras对象,我没有@GeneratedValue注释,这导致了这个问题。即使您的表设置为auto increment(以前不是这样),您也需要这个注释。奇怪的是,我没有收到这个错误,因为如果在db中设置了不带自动增量的注释,那么会得到一个ID错误。我在使用MySQLbtw