2017-11-27 8 views
0

を永続化するために渡された切り離さエンティティは、私はこれらのスレッドの多くがあります知っているが、その解決策の何も私のために働くんでしょう。org.hibernate.PersistentObjectException:新しいオブジェクトに

public void process(EreignisTexteSpezifikationEingang spezifikationEingang) throws BusinessException { 

     String eingangBaureiheBauart = spezifikationEingang.getBaureiheBauart(); 
     String eingangSoftwareVersion = spezifikationEingang.getSoftwareVersion(); 
     boolean eingangIsDeault = spezifikationEingang.getIsDefault(); 
     AnlageStatus anlageStatus = spezifikationEingang.getAnlageStatus(); 

     Assert.argNotNull(spezifikationEingang, "EreignisTexteSpezifikationEingang"); 
     Assert.argNotNull(eingangBaureiheBauart, "BaureiheBauart"); 
     Assert.argNotNull(eingangSoftwareVersion, "Software Version"); 
     Assert.argNotNull(spezifikationEingang.getInputStream(), "texteInputStream"); 

     checkExistDefaultVersionForBR(eingangBaureiheBauart, eingangIsDeault); 

     EreignisSpezifikation newSpez = new EreignisSpezifikation(); 
     newSpez.setAnlageDatum(new Date()); 
    newSpez.setSoftwareVersion(eingangSoftwareVersion); 
    newSpez.setIsDefault(eingangIsDeault); 
    newSpez.setBemerkung(spezifikationEingang.getBemerkung()); 

    if (AnlageStatus.UNDEFINED.equals(anlageStatus) || null == anlageStatus) { 
     newSpez.setStatus(AnlageStatus.VERFUEGBAR); 
    } else { 
     newSpez.setStatus(anlageStatus); 
    } 

    BaureiheBauart baureiheBauart = bauartDao.findByName(eingangBaureiheBauart); 
    newSpez.setBaureiheBauart(baureiheBauart); 
    if (baureiheBauart == null) { 
     throw InvalidEreignisSpezifikationException.invalidBaureihe(eingangBaureiheBauart, spezifikationEingang 
       .getFilename()); 
    } 

    EreignisTexteParser parser = parserFactory.getEreignistexteParser(); 

    List<Ereignistext> texte = parser.parse(spezifikationEingang.getInputStream()); 

    newSpez.setEreignistexte(texte); 

     ereignisSpezifikationDao.makePersistent(newSpez); 

EreignisSpezifikation:

... 
    @Id 
    @Column(name = "PK_EREIGNIS_SPEZ") 
    @SequenceGenerator(name = "EreignisSpezSequence", sequenceName = "SEQ_EREIGNIS_SPEZIFIKATION", allocationSize=1) 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "EreignisSpezSequence") 
    private Long id; 

    ... 
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
    @JoinColumn(name = "FK_EREIGNIS_SPEZ", nullable = false) 
    List<Ereignistext> ereignistexte; 

シーケンスの最後のインデックスが設定されていない189です。

私はすでにマージするCascadeTypeを変更しようとしましたが、何も変わりませんしました。

このオブジェクトは、それが失敗し、まだデータベースに間違いはありません。何か案は?

スタック:

at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:141) 
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:762) 
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:755) 
at org.hibernate.ejb.engine.spi.EJB3CascadingAction$1.cascade(EJB3CascadingAction.java:53) 
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:396) 
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:339) 
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:207) 
at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:426) 
at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:366) 
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:342) 
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:207) 
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:164) 
at org.hibernate.event.internal.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:449) 
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:292) 
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:192) 
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:135) 
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:78) 
at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:208) 
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:151) 
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:78) 
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:772) 
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:746) 
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:750) 
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:875) 
at org.jboss.as.jpa.container.AbstractEntityManager.persist(AbstractEntityManager.java:563) 
at de.db.udg.diagnose.udgdiag.dao.GenericDAOJpa.makePersistent(GenericDAOJpa.java:44) 
    ... 
+0

'EreignisSpezifikation newSpez =新しいEreignisSpezifikation()間の完全なスタックトレースや部品を追加してください;'と 'ereignisSpezifikationDao.makePersistent(newSpez);' – Jens

+0

@Jensは、それがtexte' 'の – 0x45

+0

コンテンツは'前に保存されている必要があり役に立てば幸いnewSpez'が保存されます – Jens

答えて

0

例外がはっきり言う:

切り離さエンティティは、あなたの問題は、あなたが取るいくつかのプロパティを設定していることである新しいオブジェクトに

を永続化するために渡されますspezifikationEingangオブジェクトからnewSpezオブジェクトに移動します。休止状態の場合、これらのオブジェクトは保持されません現在のセッションコンテキストにロードされます。次の行で例えば

:あなただけのparser.parse()呼び出しからそれを作成しているので、

List<Ereignistext> texte = parser.parse(spezifikationEingang.getInputStream()); 

newSpez.setEreignistexte(texte); 

それは非しているときに、あなたのnewSpezオブジェクトにtexteを設定しようとしているが、Listを持続しました。

+0

あなたはその結論にどうやって来ますか? – 0x45

+0

@ 0x45メソッドに 'spezifikationEingang'を渡しているので、メソッド内のセッションの' context'の外にある可能性がありますので、永続化する必要があります。 –

+0

あなたはそれをデバッグで確認し、例外をスローすることができます。 –

関連する問題