org.hibernate.TransientObjectException: object references an unsaved transient instance – save the transient instance before flushing

El esquema es el siguiente:

Esquema de Proceso Observacion Estado de Auditoria

Esquema de Proceso Observacion Estado de Auditoria

Las condiciones sobre los datos de cada tabla son:

  • se pueden crear registros de ProcesoAuditoria a demanda
  • se pueden crear registros de ObservacionAuditoria a demanda
  • la cantidad de registros de EstadoObservacion es fija:
    • pendiente
    • desestimada
    • tratada
public class ProcesoAuditoria {
   private Set<ObservacionAuditoria> setObservacionAuditoria;
}

public class ObservacionAuditoria {
   private EstadoObservacion estadoObservacion;
}

public class EstadoObservacion {}

El mapping es el siguiente:

<class name="ProcesoAuditoria" table="ProcesoAuditoria">
<set name="setObservacionAuditoria" lazy="true" fetch="join">
<key column="FKProcesoAuditoria" foreign-key="Constraint_FKProcesoAuditoria" />
<one-to-many/>
</set>

<class name="ObservacionAuditoria" table="ObservacionAuditoria">
<many-to-one name="estadoObservacion" foreign-key="Constraint_FKEstadoObservacion" column="FKEstadoObservacion" outer-join="true" fetch="join" cascade="none" />

<class name="EstadoObservacion" table="EstadoObservacion">

Queremos guardar una nueva observacion de auditoría, atachada a un proceso existente, al crear una observación de auditoria se le debe asignar un estado inicial. El codigo Java es que lanza la excepcion es la linea que intenta guardar el proceso de auditoria sin antes haber guardado la observacion de auditoria, para ello se debe descomentar la linea que guarda la observacion de auditoria y listo,😉.

List<EstadoObservacion> listEstadoObservacion = getListEstadoObservacion();
EstadoObservacion estadoObservacion = listEstadoObservacion.get(0);
ObservacionAuditoria observacionAuditoria.setEstadoObservacion(estadoObservacion);

//guardar la observacion de auditoria
//service.save(observacionAuditoria);

procesoAuditoria.getSetObservacionAuditoria().add(observacionAuditoria);

//guardar el proceso de auditoria
service.save(procesoAuditoria);

Etiquetas:

Una respuesta to “org.hibernate.TransientObjectException: object references an unsaved transient instance – save the transient instance before flushing”

  1. apnea Says:

    Hi! This post could not be written any better! Reading this post reminds me of my old room mate!
    He always kept chatting about this. I will
    forward this article to him. Pretty sure he will have a good read.
    Many thanks for sharing!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: