Les opérations insert()
, update()
et delete()
définies par l'interface StatelessSession
sont considérées comme des opérations d'accès direct aux lignes de la base de données, ce qui résulte en une exécution
immédiate du SQL INSERT
, UPDATE
ou DELETE
respectif. De là , elles ont des sémantiques tres différentes des opérations save()
, saveOrUpdate()
et delete()
définies par l'interface Session
.
StatelessSession session = sessionFactory.openStatelessSession(); Transaction tx = session.beginTransaction(); ScrollableResults customers = session.getNamedQuery("GetCustomers") .scroll(ScrollMode.FORWARD_ONLY); while ( customers.next() ) { Customer customer = (Customer) customers.get(0); customer.updateStuff(...); session.update(customer); } tx.commit(); session.close();
Opérations de style DML
Comme déjà discuté avant, le mapping objet/relationnel automatique et transparent est intéressé par la gestion de l'état
de l'objet. Ceci implique que l'état de l'objet est disponible en mémoire, d'où manipuler (en utilisant des expressions
du langage de manipulation de données - Data Manipulation Language
(DML) - SQL) les données directement dans la base n'affectera pas l'état en mémoire. Pourtant, Hibernate fournit des méthodes
pour l'exécution d'expression DML de style SQL lesquelles sont réalisées à travers le langage de requête d'Hibernate
(Chapitre 14, HQL: Langage de requêtage d'Hibernate).