Les instances persistantes transactionnelles (c'est-à-dire des objets chargés, sauvegardés, créés ou requêtés par la Session
) peuvent être manipulées par l'application et n'importe quel changement vers l'état persistant sera persisté lorsque la Session
est "flushée" (traité plus tard dans ce chapitre). Il n'y a pas besoin d'appeler une méthode particulière (comme update()
, qui a un but différent) pour rendre vos modifications persistantes. Donc la manière la plus directe de mettre à jour l'état
d'un objet est de le charger avec load()
, et puis le manipuler directement, tant que la Session
est ouverte :
DomesticCat cat = (DomesticCat) sess.load( Cat.class, new Long(69) ); cat.setName("PK"); sess.flush(); // changes to cat are automatically detected and persisted
Parfois ce modèle de programmation est inefficace puisqu'il nécessiterait un SELECT
SQL (pour charger l'objet) et un UPDATE
SQL (pour persister son état mis à jour) dans la même session. Aussi Hibernate offre une autre approche, en utilisant des
instances détachées.
Note that Hibernate does not offer its own API for direct execution of UPDATE
or DELETE
statements. Hibernate is a state management service, you don't have to think in statements to use it. JDBC is a perfect API for executing SQL statements, you can get a JDBC Connection
at any time by calling session.connection()
. Furthermore, the notion of mass operations conflicts with object/relational mapping for online transaction processing-oriented
applications. Future versions of Hibernate may however provide special mass operation functions. See Chapitre 13, Traitement par paquet for some possible batch operation tricks.