
La FAQ HibernateConsultez toutes les FAQ
Nombre d'auteurs : 4, nombre de questions : 63, dernière mise à jour : 5 juin 2009
Sommaire→Utilisation- Comment ouvrir une session ?
- Comment sauvegarder une nouvelle instance d'un objet ?
- Comment rafraîchir une instance d'un objet ?
- Comment éxé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 ?
- Quel est la différence entre save et saveOrUpdate() ?
6.1. Le language HQL
(6)
6.2. Les Criteria
(9)
- Qu'est ce que Criteria ?
- Comment effectuer une requête avec Criteria ?
- Comment restreindre les résultats de la requête ?
- Comment grouper les restrictions de manière logique ?
- Comment effectuer une recherche à partir d'un exemple ?
- Comment trier les résultats d'une requête ?
- Comment savoir le nombre d'enregistrements retournés par une requête Criteria ?
- Comment limiter le nombre de résultats retournés par une requête Criteria
- Comment récupérer le résultat d'un Criteria dans un Set ?
L'obtention d'une session Hibernate est très simple. Il faut tout d'abord créer une session factory :
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éé la factory.
Pour obtenir une session à partir de cette factory, il suffit d'appeller openSession :
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.
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() :
session.getTransaction().commit();
Dans certains cas (un trigger qui modifie des données ou après l'éxé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 :
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.
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
Lien : Pour plus d'infos
Vous devez pour cela, employez un objet de type Blob. Pour créer un blob dans votre application, il vous suffit de faire :
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 un transaction. Avant tout changement, il vous faut donc démarrer une transaction et committer cette transaction à la fin :
Transaction tc = session.beginTransaction() ;
//Différentes modifs
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(), quand à elle, va faire une vérification sur l'état de l'objet et en fonction de son état (transient, détaché ou persistant), il va effectuer l'action correcte. Vous n'avez ainsi plus de problèmes pour savoir l'état de votre objet.


















