Eumm... creo que le estas poniendo demasiado trabajo a Hibernate
En realidad una libreria como Hibernate se puede ver como un "traductor automático" de "manipulaciones con objetos" a "sentencias SQL" más un sistema de cachés. No tiene nada que ver con la sesion ni con servlets, ya que es independiente de si la aplicación es web, escritorio, o lo que sea.
La idea da vueltas en torno a tres conceptos principales:
.- El objeto global que gestiona la configuracion de las traducciones, la cache etc. Este es un objeto que suele ser único para toda la aplicación y que es caro de inicializar, por lo que se crea una vez y sólo se destruye al cerrar o reiniciar la aplicación.
.- El objeto que representa una "conversacion" de un usuario con la BDD. El equivalente a una conexion JDBC. Estos objetos se suelen crear y "destruir" más "alegremente" y suele haber uno por cada interacción del usuario con la BDD. Pongo destruir entre comillas por que a veces no se destruyen de verdad, si no que se reutilizan más veces, pero conceptualmente despues de usarse, se tiran.
.- Los objetos que representan el modelo de datos. Estos son los objetos los cuales se modifican en los programas y estas modificaciones se traducen en sentencias SQL que se lanzan contra la BDD. Normalmente los objetos se obtienen, o se crean/borran, a traves del objeto que representa la sesion, y la traducción al SQL se hace siguiendo las reglas del objeto que representa la configuración.
Teniendo estos conceptos claros, es más facil entender como funcionan la mayoria de sistemas de mapeo objeto-relacional, ya que casi todos siguen un modelo parecido aunque cambian los nombres de los objetos, como se les llama etc.
En hibernate, el XML o anotaciones es para configurar el objeto global (org.hibernate.SessionFactory), del cual se obtienen sesiones (org.hibernate.Session) y con la sesion es con la que se guardan objetos (save), se modifican (saveOrUpdate) o se borran(delete). Al realizar estas acciones se envian los comandos SQL equivalentes a la BDD (de hecho se puede configurar y solo se envian al hacer un flush() de la sesion).
Lo habitual es guardar el objeto SessionFactory en el servlet context o en algun filtro (a mi no me gusta pero es una solucion muy popular) y de ahi se saca para cada request una Session, se manipulan los objetos, se hace un flush y luego un close de la sesion.
No hay un tutorial sobre eso por que cada programa usa Hibernate como quiere e Hibernate no te dicta esas cosas, asi que no hay "guia".
S!