当我尝试与StackOverflowError
合并时,我收到EntityManager
。很抱歉,我只发布了堆栈跟踪和我想要保留的实体,但我对此不太熟悉,请对您可能需要查看的代码发表评论。
在此链接中,您会发现异常(帖子太长):http://jpst.it/vmGz。重复部分如下:
...
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3887)
at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:458)
at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:427)
at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:204)
at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:260)
at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:148)
at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1078)
at org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:1005)
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:651)
at org.hibernate.type.EntityType.resolve(EntityType.java:471)
at org.hibernate.type.ComponentType.resolve(ComponentType.java:666)
at org.hibernate.loader.Loader.extractKeysFromResultSet(Loader.java:828)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:707)
at org.hibernate.loader.Loader.processResultSet(Loader.java:940)
at org.hibernate.loader.Loader.doQuery(Loader.java:910)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:311)
at org.hibernate.loader.Loader.loadEntity(Loader.java:2111)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:82)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:72)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3887)
...
这是实体:
@Entity
@Table(name = "transaccional.auditoria")
public class Auditoria {
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="transaccional.auditoria_id_seq")
@SequenceGenerator(name="transaccional.auditoria_id_seq", sequenceName="transaccional.auditoria_id_seq")
@Column(name = "id")
private Integer id;
@OneToOne
@JoinColumn(name="atencion_id",referencedColumnName="id")
private Atencion atencion;
@OneToOne
@JoinColumn(name="prescripcion_id",referencedColumnName="id")
private Prescripcion prescripcion;
@OneToOne
@JoinColumn(name="prestador_id",referencedColumnName="id")
private Prestador prestador;
@OneToOne
@JoinColumn(name="tipo_transaccion_id",referencedColumnName="id")
private TipoTransaccion tipoTransaccion;
@OneToOne
@JoinColumn(name="nomenclador_practica_id",referencedColumnName="id")
private PracticaNomenclada nomencladorPractica;
@OneToOne
@JoinColumn(name="auditor_actual_id",referencedColumnName="id")
private Auditor auditorActual;
@Column(name = "auditor_revision")
private String auditorRevision;
@OneToOne
@JoinColumn(name="estado_auditoria_id",referencedColumnName="id")
private EstadoAuditoria estadoAuditoria;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "fecha_final")
private Date fechaFinal;
@Column(name = "cantidad_items")
private Integer cantidadItems;
@Column(name = "en_revision")
private Boolean enRevision;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "fecha_comienzo_revision")
private Date fechaComienzoRevision;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="ultimo_auditoria_detalle_id",referencedColumnName="id")
private AuditoriaDetalle ultimoAuditoriaDetalle;
@Column(name = "es_anulado")
private Boolean esAnulado;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="fecha_insert")
private Date fechaInsert;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="fecha_delete")
private Date fechaDelete;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="fecha_update")
private Date fechaUpdate;
@Column(name="version")
private int version;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="fecha_auditoria")
private Date fechaAuditoria;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="motivo_auditoria_id",referencedColumnName="id")
private MotivoAuditoria motivoAuditoria;
@Column
private String autorizacion;
@Column
private String origen;
@Column(name="nro_autorizacion")
private String nroAutorizacion;
以下是发生这种情况的服务:
@Transactional
@Override
public void update(Auditoria auditoria) {
entityManager.merge(auditoria);
}