FAQ HibernateConsultez toutes les FAQ
Nombre d'auteurs : 5, nombre de questions : 63, dernière mise à jour : 17 mars 2014 Ajouter une question
Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums de http://www.developpez.com et de l'expérience personnelle des auteurs.
Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci.
- 6.1. Le langage HQL (6)
- 6.2. Les Criteria (9)
- Comment ouvrir une session ?
- Comment sauvegarder une nouvelle instance d'un objet ?
- Comment rafraîchir une instance d'un objet ?
- Comment exécuter du SQL natif ?
- Comment insérer un fichier dans la base de données ?
- Pourquoi rien n'est modifié sur la base bien que j'utilise save ?
- Qu'est ce qu'une transaction ?
- Quelle est la différence entre save et saveOrUpdate() ?
L'obtention d'une session Hibernate est très simple. Il faut tout d'abord créer une session factory :
Code java : | Sélectionner tout |
SessionFactory factory = new Configuration().configure().buildSessionFactory();
new Configuration().configure() charge tout simplement les paramètres de configuration d'Hibernate dans la classe. Ensuite, à partir de cette classe, on crée la factory.
Pour obtenir une session à partir de cette factory, il suffit d’appeler openSession :
Code java : | Sélectionner tout |
Session session = factory.openSession();
Vous disposez maintenant d'une session sur laquelle vous allez pouvoir travailler.
Pour sauvegarder une instance d'un objet que vous créez directement dans le code, il vous faut ensuite appeler la méthode save de la session pour que cet objet soit créé en base.
Code java : | Sélectionner tout |
1 2 3 4 5 | Livre livre = new Livre(); livre.setTitle("Livre"); livre.setAuteur("Auteur"); session.save(livre); |
Il ne faut pas oublier de committer les changements de la transaction via la méthode commit() :
Code java : | Sélectionner tout |
session.getTransaction().commit();
Dans certains cas (un trigger qui modifie des données ou après l'exécution d'une requête directement sur le serveur (native)), les données qui sont dans votre objet ne sont plus à jour ; il vous faut donc les rafraîchir.
Pour cela, il vous faut employer la méthode refresh sur votre objet :
Code java : | Sélectionner tout |
session.refresh(votreObjet);
En plus du HQL, vous pouvez aussi utiliser du SQL natif. Pour cela, il vous faut employer la méthode createSqlQuery de votre session.
Code java : | Sélectionner tout |
Query query = session.createSQLQuery("Requête en SQL natif");
Si c'est une requête de mise à jour, vous pouvez utiliser executeUpdate pour l'exécuter ou sinon, utiliser list() pour récupérer les résultats.
Vous devez pour cela, employez un objet de type Blob. Pour créer un blob dans votre application, il vous suffit de faire :
Code java : | Sélectionner tout |
Blob blob = Hibernate.createBlob(inputStreamVersLeFichier);
Ensuite, vous pouvez le mettre comme tout autre objet dans une classe persistante et la sauver.
Il est évident que le champ dans le fichier de mapping doit être de type blob.
La méthode save est là pour dire à Hibernate que cet objet va être sauvé, mais il faut encapsuler ces sauvegardes dans une transaction. Avant tout changement, il vous faut donc démarrer une transaction et committer cette transaction à la fin :
Code java : | Sélectionner tout |
1 2 3 4 5 | Transaction tc = session.beginTransaction() ; //Différentes modifications tc.commit() ; |
Ainsi, les changements seront répercutés dans la base de données.
Une transaction est un objet qui définit une unité de travail atomique. Une transaction encapsule différentes opérations. On démarre une transaction par la session et pour valider les changements intervenus durant cette transaction, il faut procéder à un commit de celle-ci.
save() va s'occuper de sauvegarder un objet qui n'est pas encore présent dans la base de données. saveOrUpdate(), quant à elle, va faire une vérification sur l'état de l'objet et en fonction de son état (transient, détaché ou persistant), elle va effectuer l'action correcte. Vous n'avez ainsi plus de problèmes pour savoir l'état de votre objet.
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.