[Hibernate] saveOrUpdate / Merge
Bonjour à toutes et à tous,
Désolé si je me trompe de section :)
Voila j'ai un petit souci que je n'arrive pas à résoudre concernant l'utilisation de saveOrUpdate/merge.
Débutant dans le domaine, je souhaite pouvoir manipuler des objets avec la session sans forcément savoir lesquels (mon application est configurée par les utilisateurs et "ont la main" sur ce qui devra être enregistré en base)
Voici les exemples tout bêtes qui me servent de test
(Si vous ne comprenez pas je pourrais placer le code qui me bloque mais j'espère que ces simples exemples suffiront :) )
Avec le saveOrUpdate
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
public static void main(String[] args) {
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
Consommation c1 = new Consommation();
c1.setNumeroLigne(612345678);
c1.setAnnee(2012);
c1.setMois(03);
c1.setCout((float)10);
session.saveOrUpdate(c1);
tx.commit();
session.clear();
Consommation c2 = new Consommation();
c2.setNumeroLigne(612345678);
c2.setAnnee(2012);
c2.setMois(03);
c2.setMateriel("Iphone");
session.saveOrUpdate(c2);
tx.commit();
HibernateUtil.closeSession();
} |
Avec le merge
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
public static void main(String[] args) {
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
Consommation c1 = new Consommation();
c1.setNumeroLigne(612345678);
c1.setAnnee(2012);
c1.setMois(03);
c1.setCout((float)10);
session.saveOrUpdate(c1);
tx.commit();
Consommation c2 = new Consommation();
c2.setNumeroLigne(612345678);
c2.setAnnee(2012);
c2.setMois(03);
c2.setMateriel("Iphone");
try {
session.saveOrUpdate(c2);
} catch (NonUniqueObjectException e) {
// TODO: handle exception
session.merge(c2);
}
tx.commit();
HibernateUtil.closeSession();
} |
Dans les 2 cas je perds l'information "cout".
Comment puis-je faire pour que le saveOrUpdate fasse la comparaison avec ce qu'il y à en base et ne remplace pas les données présente par une donnée nulle ?
En espérant avoir été clair.
Adns