ayuda persistir una lista con hibernate

hola a todos, me estoy iniciando con hibernate, he leido la doc de hibernate 3.5 pero no le he entendido muy bien a esto de las colecciones, mi problema es el siguiente.
De una tabla proyectos obtengo 2 campos el id y el nombre con una consulta HQL y los muestro en un select, hasta ahi todo bien, pero como hago para que esta lista se persista y solo haga un accesso a la base de datos. mi codigo es este.

public class MailProyectoDto implements Serializable {
public MailProyectoDto() { }
private int idproyecto;
private String strproyecto;

//getter y setters

}

public class Proyectos{
public List getProyectos() {
try{
listaProy = sesion.createCriteria(MailProyectoDto.class, queryProyectos).list();
}catch(....)
....
}
return listaProy;
}

Los datos de la bd cambian muy de vez en cuando por eso prentendo que la lista de de getProyectos quede persistida pero no se como hacerlo si es en el xml o como puedo hacerlo con sesion.persist(), o necesito una clase auxiliar. gracias por su ayuda

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

persistir

Qué entiendes por persistir? Porque en Hibernate "persistir" se refiere a tomar un objeto que existe solamente en memoria, y guardar sus propiedades en la base de datos (en una o varias tablas, uno o varios registros).

Aquí mencionas que ya tienes los proyectos en la base de datos. Creo que lo que quieres hacer es guardar en memoria esos datos para no estar leyéndolos de la base de datos a cada rato. Eso no es persistir, eso es un cache. Hibernate tiene mecanismos para guardar datos en cache, para evitar consultas a la base de datos. Incluso permite usar distintos caches, creo que el default es oscache pero se pueden usar otras implementaciones.

Singleton

Pues por lo que veo eso te retorna una lista y la puedes recibir desde el lugar donde invocas ese metodo. Como bien dice Enrique podria ser que estes buscando un cache el cual lo tengas disponible desde cualquier punto de tu sistema pues ahi lo que veo es que manejes un singleton que almacene tu lista, ademas que debes indicar a Hibernate qe no quieres una carga perezosa de datos para que te traiga el registro y sus relaciones. Ten cuidado eso puede ocacionar un horripilante "java.lang.OutOfMemoryError: Java heap space" por lo que no te recomiendo hacer la carga de toda lainformacion en memoria.

Revisa tu forma de implementacion pues quizas puedas evitar tanta carga de informacion a memoria. Si dices que son datos que no cambian en la BD pues podrias escribir tu objeto en disco duro con la clase ObjectOutputStream de esa forma no cnsultas a base de datos pero si que necesitas leer escribir un archivo y en ese inter puede tocarte amala suerte que haya cambiado tu informacion de BD... yo le voy mas a la BD pero no a la carga de toda la informacion