27

生成了我的实体 ID,当我使用 DAO 而不是 Spring 数据 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 是正确的。有谁知道为什么我打电话后没有设置id save()?我用的时候没有问题entitymanager.save()

4

7 回答 7

23

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

为什么在 Spring Data JPA Repository 上的 save() 之后使用返回的实例?

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

于 2013-05-05T01:37:18.820 回答
17

试试这个

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

然后打电话给getId();

于 2013-05-03T06:15:35.207 回答
13
  1. 您应该使用以下repository.saveAndFlush();方法:

MyObject savedObject= repository.saveAndFlush(newObject);

  1. 在实体对象描述中,您应该将以下属性(@GeneratedValue(strategy = GenerationType.AUTO))添加到相关字段(id)中:
@Id   
@Column(name = "id")   
@GeneratedValue(strategy = GenerationType.AUTO)   
public long getId() {  
    return id;  
}
于 2017-06-11T16:04:03.377 回答
6

@GeneratedValue尝试为like指定策略

@GeneratedValue(strategy = GenerationType.AUTO)
于 2013-05-05T01:33:11.400 回答
6

该方法返回保存的id

myobject = repository.saveAndFlush(myobject);

现在你有了你的id.

于 2014-02-24T10:50:31.470 回答
0

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

    @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";
}
于 2019-06-05T06:18:28.993 回答
0

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

于 2020-03-06T08:52:24.890 回答