My entity id is generated, and it was working fine when I use DAO instead of Spring data JPA.
@Id
@Column(name = TABLE_COLUM_NAME_ID)
@GeneratedValue
private
I finally figured it out. Even though the save method is void, you can set a variable to it.(?)
@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";
}
This method returns the saved id
myobject = repository.saveAndFlush(myobject);
Now you have your id
.
I guess you didn't have a @Transactional annotation on your Service method.
Try specifying strategy for @GeneratedValue
like
@GeneratedValue(strategy = GenerationType.AUTO)
I believe this post answers your question:
Why to use returned instance after save() on Spring Data JPA Repository?
The repository.save()
method actually returns a new object like JPA entityManager.merge()
and the returned object is the one that will have the ID set.
Try this like
myboject = repository.save(myboject);
repository.flush();
Then after call to getId()
;