Spring Data jpa保存无法获取ID

4ktjp1zp  于 2023-02-19  发布在  Spring
关注(0)|答案(8)|浏览(370)

生成了我的实体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()时没有问题。

jmo0nnb3

jmo0nnb31#

我相信这篇文章回答了你的问题:
Why to use returned instance after save() on Spring Data JPA Repository?
repository.save()方法实际上返回一个新对象,如JPAentityManager.merge(),并且返回的对象将具有ID集。

dgenwo3n

dgenwo3n2#

像这样试试

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

然后在调用getId()之后;

xxb16uws

xxb16uws3#

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;  
}
qij5mzcb

qij5mzcb4#

此方法返回保存的id

myobject = repository.saveAndFlush(myobject);

现在您有了id

sz81bmfz

sz81bmfz5#

尝试为@GeneratedValue指定策略,例如

@GeneratedValue(strategy = GenerationType.AUTO)
gmxoilav

gmxoilav6#

我终于明白了。虽然保存方法是void,但你可以给它设置一个变量。(?)

@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";
}
aiazj4mn

aiazj4mn7#

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

mwkjh3gx

mwkjh3gx8#

上面的答案都不能解决这个问题,但是设置下面的注解起作用了。

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

对于上下文,我使用mysql并将ID设置为以下定义

create table table_name
    (
        id             int auto_increment primary key,
        ... other columns ...
    )

相关问题