Mon identifiant d'entité est généré et cela fonctionnait bien lorsque j'utilise DAO au lieu de Spring JPA.
@Id
@Column(name = TABLE_COLUM_NAME_ID)
@GeneratedValue
private int id;
Maintenant, je commence à utiliser les données Spring JPA, et après avoir appelé repository.save(myboject)
ou repository.saveAndFlush(myobject)
, j'appelle myobject.getId()
. Mais l'identifiant n'est jamais rempli.
J'ai recherché ma base de données et l'objet est dans la base de données et l'ID est correct. Est-ce que quelqu'un sait pourquoi l'ID n'est pas défini après avoir appelé save()
? Je n'ai aucun problème lorsque j'utilise entitymanager.save()
.
Essayez ça comme
myboject = repository.save(myboject);
repository.flush();
Puis après appel à getId()
;
Je crois que ce message répond à votre question:
Pourquoi utiliser l'instance retournée après save () sur Spring Data JPA Repository?
La méthode repository.save()
renvoie en fait un nouvel objet comme JPA entityManager.merge()
et l'objet retourné est celui qui aura l'ID défini.
repository.saveAndFlush();
:
MyObject savedObject= repository.saveAndFlush(newObject);
@GeneratedValue(strategy = GenerationType.AUTO)
) au champ associé (id
):@Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.AUTO) public long getId() { return id; }
Essayez de spécifier une stratégie pour @GeneratedValue
comme
@GeneratedValue(strategy = GenerationType.AUTO)
Cette méthode renvoie le id
enregistré
myobject = repository.saveAndFlush(myobject);
Vous avez maintenant votre id
.
Je l'ai finalement compris. Même si la méthode de sauvegarde est nulle, vous pouvez lui attribuer une variable. (?)
@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";
}