简体   繁体   English

org.hibernate.PersistentObjectException:分离的实体被传递以持久保存在新对象上

[英]org.hibernate.PersistentObjectException: detached entity passed to persist on new Object

I know there are many of these threads, but nothing of their solutions would work for me. 我知道这些线程很多,但是它们的解决方案对我来说都不起作用。

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: 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;

The Last index of the sequence is 189 which is NOT set. 序列的最后一个索引是189,未设置。

I've already tried to change the CascadeType to Merge but changes nothing. 我已经尝试过将CascadeType更改为Merge,但是什么也没有改变。

This Object is definitely not in the database still it fails. 该对象绝对不在数据库中,但仍然会失败。 Any ideas? 有任何想法吗?

Stack: 堆:

 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)
    ...

The exception clearly says: 例外明确指出:

detached entity passed to persist on new Object 传递给新对象的分离实体

Your problem is that you are setting some properties that you take from spezifikationEingang object to your newSpez object, For hibernate these objects are not persisted because they haven't been loaded in the current session context. 您的问题是您正在设置从spezifikationEingang对象获取的某些属性到newSpez对象。对于休眠状态,这些对象没有持久化,因为它们尚未在当前会话上下文中加载。

For example in the following lines: 例如以下几行:

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

newSpez.setEreignistexte(texte);

You are trying to set texte to your newSpez object, while it is a non persisted List , because you have just created it from parser.parse() call. 您正在尝试将texte设置为newSpez对象,而它是一个非持久List ,因为您刚刚通过parser.parse()调用创建了它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 org.hibernate.PersistentObjectException:分离的实体传递给持久域对象 - org.hibernate.PersistentObjectException: detached entity passed to persist domain object Hibernate:org.hibernate.PersistentObjectException:传递给persist的分离实体 - Hibernate: org.hibernate.PersistentObjectException: detached entity passed to persist org.hibernate.PersistentObjectException:分离的实体传递给持久化-ManyToMany映射 - org.hibernate.PersistentObjectException: detached entity passed to persist - ManyToMany Mapping org.hibernate.PersistentObjectException:分离的实体传递到持久合并 - org.hibernate.PersistentObjectException: detached entity passed to persist MERGE org.hibernate.PersistentObjectException:传递给持久化 OrderProduct 的分离实体 - org.hibernate.PersistentObjectException: detached entity passed to persist OrderProduct playframework org.hibernate.PersistentObjectException:传递给persist的分离实体:models - playframework org.hibernate.PersistentObjectException: detached entity passed to persist: models 间歇性错误org.hibernate.PersistentObjectException:传递给persist的分离实体 - Intermittent error org.hibernate.PersistentObjectException: detached entity passed to persist org.hibernate.PersistentObjectException:传递给持久异常的分离实体 - org.hibernate.PersistentObjectException: detached entity passed to persist exception SPRING JPA-org.hibernate.PersistentObjectException:传递给持久化的分离实体: - SPRING JPA - org.hibernate.PersistentObjectException: detached entity passed to persist: 多对多org.hibernate.PersistentObjectException:分离的实体传递给持久化 - Many to many org.hibernate.PersistentObjectException: detached entity passed to persist
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM