1

TransientObjectExceptionが発生します

       org.hibernate.TransientObjectException: object references an unsaved transient instance 
- save the transient instance before flushing: EntityB.entityA -> EntityA
    at org.hibernate.engine.CascadingAction$9.noCascade(CascadingAction.java:376)
        at org.hibernate.engine.Cascade.cascade(Cascade.java:162)
        at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:454)
        at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:288)
        at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
        at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
        at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49)
        at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:154)
        at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:110)
        at org.hibernate.impl.SessionImpl.firePersistOnFlush(SessionImpl.java:671)
        at org.hibernate.impl.SessionImpl.persistOnFlush(SessionImpl.java:663)
        at org.hibernate.engine.CascadingAction$9.cascade(CascadingAction.java:346)
        at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:291)
        at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:239)
        at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:192)
        at org.hibernate.engine.Cascade.cascade(Cascade.java:153)

これらの2つのエンティティには、OneToOneの関係があります。

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "ENTITY_B_ID")
    public EntityB getEntityB() {
        return this.entityB;
    }

およびEntityBの場合:

@OneToOne(fetch = FetchType.LAZY, mappedBy = "entityB")
    public EntityA getEntityA() {
        return this.entityA;
    }

したがって、EntityAからEntityBへのCascadeType.ALLがあります。EntityBを直接永続化していないことを確認しました。ログを出力して、表示している2つのエンティティのみが永続化され、entityAインスタンスが正しいentityAインスタンスを指しているentityBインスタンスを指していることを示します(およびスタックトレースから、永続化がカスケードからのものであることがわかります)。したがって、entityBはentityAからのカスケードのために永続化され、entityBはentityAが一時的であると不平を言っています???

ここで何がうまくいかない可能性があるアイデアはありますか?

4

0 に答える 0