IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

saveOrUpdate avec unicité


Sujet :

Hibernate Java

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1
    Par défaut saveOrUpdate avec unicité
    Bonjour,

    Mon problème est comment utiliser "saveOrUpdate" avec un identifiant généré automatiquement.

    Je m'explique avec un exemple :
    classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Person {
    	private int person_id;
    	private String nom;
    	private int age;
    // avec les getters et setters
    }
    mapping :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <class name="Person" table="Person">
    	<id name="person_id" type="int">
    		<generator class="increment"/>
    	</id>
    	<property name="nom" type="string" />
    	<property name="age" type="int" />
    </class>
    Le code suivant insère bien dans ma base de données le nouvel objet en lui attribuant un id :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Person p = new Person();
    p.setNom("nom");
    p.setAge(20);
    session.saveOrUpdate(p);
    Mon problème vient que si je réitère ce code, soit il insère à nouveau l'objet mais sous un autre id, soit il lève une exception si j'ai indiqué l'unicité de nom.

    Donc est il possible de rajouter quelque chose pour que la mise à jour se fasse automatiquement si un objet du même nom se trouve dans la base.

    Je cherche à éviter de questionner la base pour vérifier si un objet du même nom existe déjà ou d'insérer des try/catch partout.

    Je vous remercie si vous avez des idées ou me dire clairement que cela n'est pas possible.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 383
    Par défaut
    Si tu fais un new, hibernate va générer un id (l'objet n'a pas d'Id).

    Puisque le nom semble être ta clé fonctionnelle (métier), il faut d'abord faire une requête sur le nom pour récupérer l'objet avec l'id.

    S'il y a déjà un objet en base avec ce nom, tu le modifies (par exemple setAge()), et s'il n'y en a pas tu fais ton new().
    saveOrUpdate() se charge du reste.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Par défaut
    Si ça peut aider, saveorUpdate n'est pas équivalent à un "insert or update" sql.
    D'ailleurs la méthode update de hibernate n'est pas directement équivalente à un update en sql.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 106
    Par défaut
    Sinon tu peux tester avec un session.merge, il devrait te mettre à jour l'objet existant.

Discussions similaires

  1. Conteneur ordonné avec unicité ?
    Par oodini dans le forum SL & STL
    Réponses: 12
    Dernier message: 12/09/2008, 13h27
  2. tableau d'entiers avec unicité d'élements
    Par s-ehtp dans le forum C
    Réponses: 6
    Dernier message: 12/04/2008, 22h29
  3. Problème SaveOrUpdate avec entity-name
    Par worldchampion57 dans le forum Hibernate
    Réponses: 5
    Dernier message: 11/04/2008, 12h06
  4. Probleme avec saveOrUpdate()
    Par faico dans le forum Hibernate
    Réponses: 3
    Dernier message: 03/04/2007, 16h03
  5. Réponses: 6
    Dernier message: 12/12/2006, 13h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo