[英]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.