Mi comprensión de Hibernate es que los objetos que se cargan desde el DB se agregan a la sesión. En varios puntos, dependiendo de su configuración, la sesión se vacía. En este punto, los objetos modificados se escriben en la base de datos.Cuando Hibernate vacía una sesión, ¿cómo decide qué objetos de la sesión están sucios?
¿Cómo decide Hibernate qué objetos están "sucios" y necesitan ser escritos?
¿Los proxies generados por las asignaciones de intercepción de Hibernate a los campos, y agregan el objeto a una lista sucia en la sesión?
¿Hibernate observa cada objeto de la Sesión y lo compara con el estado original del objeto?
¿O algo completamente diferente?
Por favor, explique mejor: si la bandera sucia no reduce la cantidad de objetos que deben ser revisados, ¿cuál es su utilidad? Furtermore en la fuente veo dos banderas sucias diferentes: una en AbstractFieldInterceptor y la comprueba EntityEntry.requiresDirtyCheck(), otra en AbstractPersistentCollection y se comenta que "las colecciones detectan los cambios realizados a través de su interfaz pública y se marcan tan sucios como un rendimiento optimización "(no sé dónde está marcado en el código). – Pino
@Matt Quail, no pude encontrar banderas sucias de las que está hablando, solo hay una que se puede usar solo si se usa la instrumentación bytecode de compilación. –