【问题标题】:Spring data jpa save can not get idSpring数据jpa保存无法获取id
【发布时间】:2017-10-28 18:13:06
【问题描述】:

我的实体 id 已生成,当我使用 DAO 而不是 Spring data JPA 时它工作正常。

@Id
@Column(name = TABLE_COLUM_NAME_ID)
@GeneratedValue
private int id;

现在我已经开始使用 Spring data JPA,在我调用repository.save(myboject)repository.saveAndFlush(myobject) 之后,我调用myobject.getId()。但 id 永远不会被填充。

我搜索了我的数据库,对象在数据库中,并且 id 是正确的。 有谁知道我打电话给save() 后为什么没有设置id?我使用entitymanager.save()时没有问题。

【问题讨论】:

    标签: jpa spring-mvc spring-data spring-data-jpa


    【解决方案1】:

    试试这个

    myboject = repository.save(myboject);
    repository.flush();
    

    然后打电话给getId();

    【讨论】:

    • 问题是MyEntity requestEntity; savedEntity = repositroy.save(requestEntity)。 Id 不在 requestEntity 中,而是在 savedEntity 中
    • @NPKR 请不要像尝试这样给出答案...在需要时添加适当的解释来回答。
    • 不需要这个,你只需要在实体中添加以下注释:@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private long id;
    【解决方案2】:

    尝试为@GeneratedValue 指定策略喜欢

    @GeneratedValue(strategy = GenerationType.AUTO)
    

    【讨论】:

    【解决方案3】:

    我相信这篇文章回答了你的问题:

    Why to use returned instance after save() on Spring Data JPA Repository?

    repository.save() 方法实际上返回了一个新对象,例如 JPA entityManager.merge(),返回的对象就是设置了 ID 的对象。

    【讨论】:

      【解决方案4】:

      该方法返回保存的id

      myobject = repository.saveAndFlush(myobject);
      

      现在你有你的id

      【讨论】:

        【解决方案5】:
        1. 你应该使用repository.saveAndFlush();方法:

        MyObject savedObject= repository.saveAndFlush(newObject);

        1. 在 Entity 对象描述中,您应该在相关字段(id)中添加以下属性(@GeneratedValue(strategy = GenerationType.AUTO)):
        @Id   
        @Column(name = "id")   
        @GeneratedValue(strategy = GenerationType.AUTO)   
        public long getId() {  
            return id;  
        }
        

        【讨论】:

        • 这对我有用,谢谢,缺少 generateValue 注释
        【解决方案6】:

        我终于明白了。即使保存方法是无效的,你也可以给它设置一个变量。(?)

            @PostMapping(value = "customer/{id}/wish/add")
        public String processAddWish(Model model, @PathVariable int id,
                                     @ModelAttribute @Valid WishOrder newWishOrder,
                                     Errors errors) {
            if (errors.hasErrors()) {
                return "customer/wish/add";
            }
            //Initialize variable to the save method, even though it is void and returns nothing//
            //Eliminates need to access object through a .findById//
            //If you need the id of the saved object instantly, just add .getId to save call//
            //wishOrderDao.save(newWishOrder).getId()//
            WishOrder wish = wishOrderDao.save(newWishOrder);
            Customer customer = customerDao.findById(id);
            customer.getWishList().add(wish);
            customerDao.save(customer);
        
            model.addAttribute("customer",(customer));
            model.addAttribute("wishList", (customer.getWishList()));
        
            return "customer/wishList";
        }
        

        【讨论】:

          【解决方案7】:

          我猜你的 Service 方法上没有 @Transactional 注释。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-01-28
            • 2015-06-30
            • 1970-01-01
            • 2017-01-31
            • 2021-03-16
            • 2014-06-07
            • 2019-06-02
            相关资源
            最近更新 更多