Tengo un escenario en barbecho que quiero entender claramente para poder solucionarlo de manera adecuada.
Algunas entidades deben persistir en la base de datos PostgreSQL usando hibernación. Este es el curso de los acontecimientos que sucede antes de los errores.
La entidad intenta guardarse en la base de datos (como parte de la lógica con una ejecución de subprocesos múltiples). Esa entidad tiene un carácter null ( 0x00 ) como parte de su atributo y obtengo una excepción causada por
org.postgresql.util.PSQLException: ERROR: invalid byte sequence for encoding "UTF8": 0x00 porque PostgreSQL no puede persistir caracteres null , lo cual está bien.
Esa misma entidad luego se modifica, pero ahora en un entorno de subproceso único después del final de una ejecución paralela de la lógica mencionada anteriormente y se persiste nuevamente para actualizar la base de datos.
Ahora aparece una excepción Optimistic Locking Failed que dice que la entidad ya se ha guardado y que el objeto está "Obsoleto".
org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException: Object of class [com.yc.isystem.business.Offer] with identifier [691909329]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.yc.isystem.business.Offer#691909329]¿Alguien puede explicar qué sucede en segundo plano y cómo puedo evitar que esto suceda?