GaryF no está mal, pero no es técnicamente correcta :-) Anton es más correcto en esto, pero para complementar su respuesta:
Primer Nivel caché: este es un "caché" que almacena todas las entidades conocidas por una sesión específica. Entonces, si tiene 3 transacciones dentro de esta sesión, contendrá todas las entidades afectadas por las tres transacciones. Se borra cuando cierra la sesión o cuando realiza el método "borrar".
caché de segundo nivel: se trata de una caché "real" y se delega a un proveedor externo, como Infinispan. En esta memoria caché, usted tiene control total sobre el contenido de la memoria caché, lo que significa que puede especificar qué entradas se deben desalojar, cuáles se deben conservar más tiempo, etc.
para el primer nivel de caché, lo que sucede cuando la caché está llena? Mencionó dos casos en los que se borra la caché, pero estoy bastante seguro de que se borrará automáticamente de acuerdo con un algoritmo "último usado" o similar cuando la caché se llene. De lo contrario, se produciría una excepción de falta de memoria o no se almacenaría nada en la memoria caché después de ese punto. – KyleM
Es posible que desee comprobar esto con la documentación o experimentando usted mismo, pero por lo que recuerdo, las entradas en el caché de primer nivel nunca son desalojadas. Por lo tanto, si tiene una transacción que afecta a una gran cantidad de datos, es posible que enfrente una excepción de falta de memoria (como en las operaciones por lotes). Para este caso de "borde", es posible que desee utilizar un StatelessSession (http://docs.jboss.org/hibernate/orm/3.6/javadocs/org/hibernate/StatelessSession.html). – jpkrohling