Bonjour à tous,
Je viens vers vous pour un petit soucis.J'ai une base de données avec 2 tables : Un élément principal avec toutes ces infos (nom, attributs, etc) et une autre table en relation avec la première qui contient toutes des infos supplémentaires ainsi que l'ID vers l'élément principal (relation many to one)L. orsque j'essaye de faire un saveOrUpdatedes infos supplémentaires avec Hibernate, celui-ci m'exécute un update au lieu d'un save si les éléments ne sont pas encore dans la base de donnée, du coup il me sort l'erreur suivante :
saveorupdate org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
En cherchant sur Google j'ai remarquer que cette erreur arrivait parce qu'Hibernate se base sur la clé primaire pour faire les update, hors je n'en ai pas dans cette table. Par contre, lorsque je fais un simple save, là les éléments sont biens sauvés, sauf l'ID qui n'est pas repris, mais est ajouter tout seul par Hibernate comme si c'était un auto généré alors que ça ne l'est pas, il ne prend donc pas en compte l'ID que je lui donne au moment de la sauvegarde.
Le code suivant m'affiche bien le bon ID dans la console, on va dire 16 :
1 2 3 4 5 6 7
| public long save(MetaRelationExtraCode metaRelationExtraCode) {
System.out.println("ID Relation Dao : " + metaRelationExtraCode.getId());
sessionFactory.getCurrentSession().save(metaRelationExtraCode);
return 0;
} |
Mais dans la base de donnée, je me retrouve avec un ID qui est a 1262... Au niveau du controlleur je set les attributs de ma classe de cette façon (valeurs récupéré en ajax depuis un formulaire) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| @RequestMapping(value="/relationExtraCode", method=RequestMethod.GET)
@ResponseBody
public boolean addRelationExtraCode(@RequestParam("relationId") Long id,
@RequestParam("imports") String imports,
@RequestParam("tags") String tags,
@RequestParam("code") String code){
MetaRelationExtraCode relationExtraCode = new MetaRelationExtraCode();
relationExtraCode.setId(id);
relationExtraCode.setExtraImport(imports);
relationExtraCode.setExtraTag(tags);
relationExtraCode.setExtraCode(code);
metaRelationExtraCodeService.save(relationExtraCode);
return true;
} |
J'ai mis des Sysout un peu partout pour suivre le chemin de la classe jusqu'à sa sauvegarde en base de donnée et y'a aucuns soucis, les valeurs ne changent pas jusqu'au save, surtout que les autres attributs sont bien sauvés, y'a vraiment que l'ID qui pose problème. quelqu'un à une solution à me proposer ?
Merci d'avance
Partager