1

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/objectstate.htmlで見ました

Hibernate Session を使用してオブジェクトを永続化する

しかし、それが文字通りセッションを使用することを意味するかどうかはわかりません。説明: インスタンスの保存時に次のエラーが発生します。

org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: xxxxxxx.entities.Sujeto.progTtipoSujeto -> xxxx.entities.TipoSujeto; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: xxxxx.entities.Sujeto.progTtipoSujeto -> xxxxx.entities.TipoSujeto
    at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:651)
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:92)
    at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:460)

その理由は、Sujeto.progTtipoSujeto が TipoSujeto 型であり、Sujeto インスタンスを保存する前にインスタンス化されたばかりだからです。また、フィールド progTtipoSujeto は識別子フィールドに結合されています。

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "IDN_TIPO_SUJETO", insertable = false, updatable = false)
private TipoSujeto progTtipoSujeto;
@Column(name = "IDN_TIPO_SUJETO")
private Integer idnTipoSujeto;

私が与えられた解決策(それは機能します)は、保存する前にデータベースから取得することです:

parserSujetoToEntity.parserSujetoToEntity(sujetoDTO, sujetoEntity);
TipoSujeto tipoSujetoEntity = (TipoSujeto) this.findByPrimaryKey(TipoSujeto.class, sujetoDTO.getTipo());
sujetoEntity.setProgTtipoSujeto(tipoSujetoEntity);
this.save(sujetoEntity);

セッションを使用して同じことを行う方法はありますか?

4

1 に答える 1

0

同じセッションオブジェクトを使用しようとしているので、セッションのmerge()メソッドを使用できます。これの答えを参照することができます

于 2013-01-23T13:25:30.747 に答える