Java 休眠已删除的对象,然后重新保存

Java 休眠已删除的对象,然后重新保存,java,hibernate,exception,Java,Hibernate,Exception,它快把我逼疯了! 我知道此错误消息的含义,但它不起作用 我需要删除一个Hibernate实体,它有一些关联 如果我关闭我的应用程序并重新打开它,删除就可以了。但每次我创建那个对象并删除之后,我都会得到这个错误 我的会话似乎将该对象保存在范围之外的某个地方 这是我的删除片段 initialGroups.removeAll(masterGroups); for (InterfaceMasterSignalGroup group : in

它快把我逼疯了! 我知道此错误消息的含义,但它不起作用

我需要删除一个Hibernate实体,它有一些关联

如果我关闭我的应用程序并重新打开它,删除就可以了。但每次我创建那个对象并删除之后,我都会得到这个错误

我的会话似乎将该对象保存在范围之外的某个地方

这是我的删除片段

                initialGroups.removeAll(masterGroups);
                for (InterfaceMasterSignalGroup group : initialGroups) {

                    group.getMasterSignals().forEach(s -> s.setMaster(null));
                    group.setMasterSignals(null);

                    group.getConfig().getMasterSignals().remove(group);
                    group.setConfig(null);

                    session.delete(group);

                }
首先,我删除了2个引用部分,并删除了对象本身。 调用提交抛出“将通过级联重新保存的对象”

这里是映射,所有其他字段都不是关联

@OneToMany(fetch = FetchType.LAZY, mappedBy = InterfaceDestinationSignal.MASTER)
@Cascade({ CascadeType.SAVE_UPDATE, CascadeType.DETACH })
@XmlTransient
public List<InterfaceDestinationSignal> getMasterSignals() {
    return masterSignals;
}

public void setMasterSignals(List<InterfaceDestinationSignal> masterSignals) {
    firePropertyChange(InterfaceMasterSignalGroup.MASTER_SIGNALS, this.masterSignals, this.masterSignals = masterSignals);
}

@ManyToOne
@JoinColumn(name = InterfaceMasterSignalGroup.CONFIG_ID)
@Cascade({ CascadeType.DETACH })
@XmlTransient
public GenericConfigInterfaceEntity getConfig() {
    return config;
}

public void setConfig(GenericConfigInterfaceEntity config) {
    firePropertyChange(InterfaceMasterSignalGroup.CONFIG, this.config, this.config = config);
}

看起来,您的对象
仍在引用其他地方。为了正确地删除它,首先你必须从它引用的其他地方删除它

例如:列表、地图或任何其他集合等


检查它是否仍在其他地方裁判。

好的,我已经解决了问题。第八层问题就在前面

在分配期间,我已将组分配给目标信号,但反之亦然。缺少该选项将导致组中出现空集合(因此未删除任何内容)和异常occours


重新打开应用程序从数据库中提取了正确的模型,删除操作正常。

问题是我不知道在哪里。参考底图数据库是sqlite,所以我有限制,只能有一个会话。我必须小心地维护这个会话。@Pascal这可能会帮助您找到关系:我有两个不同的对话框。一个用于创建组,另一个用于映射组。如果我创建组->关闭该对话框->重新打开该对话框->删除有效。但是创建组->关闭对话框->打开映射对话框->映射组->关闭映射对话框->打开创建对话框->删除失败。我以为关闭对话框会破坏它的所有列表和引用对象!?!如果映射正确,您可以简单地使用CascadeType.REMOVE.No,如果我使用REMOVE my config,所有目标信号都将被删除。我想要的是分离我的主组并将其删除。然后您必须手动删除关联,如objectName.setMappedClass(null)对其所有依赖项,这是我看到的唯一选项#你能添加stacktrace吗?cascade将重新保存哪个对象?
org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [x.y.z.interfaceentity.InterfaceMasterSignalGroup#1]
    at org.hibernate.internal.SessionImpl.forceFlush(SessionImpl.java:1236)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:187)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
    at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:684)
    at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:676)
    at org.hibernate.engine.spi.CascadingActions$5.cascade(CascadingActions.java:235)
    at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:350)
    at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:293)
    at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:161)
    at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:118)
    at org.hibernate.event.internal.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:167)
    at org.hibernate.event.internal.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:158)
    at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:91)
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:55)
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222)
    at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
    at x.y.z.database.DatabaseManager.commit(DatabaseManager.java:187)
    at x.y.z.interfacedatabase.InterfaceDatabaseManager.commit(InterfaceDatabaseManager.java:164)
    at x.y.z.view.dialog.InterfaceMasterDialog$1.widgetSelected(InterfaceMasterDialog.java:163)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4172)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3761)
    at org.eclipse.jface.window.Window.runEventLoop(Window.java:832)
    at org.eclipse.jface.window.Window.open(Window.java:808)
    at x.y.z.view.dialog.InterfaceMasterDialog.initAndOpen(InterfaceMasterDialog.java:101)
    at x.y.z.view.dialog.InterfaceEditDialog$2.widgetSelected(InterfaceEditDialog.java:214)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4172)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3761)
    at org.eclipse.jface.window.Window.runEventLoop(Window.java:832)
    at org.eclipse.jface.window.Window.open(Window.java:808)
    at x.y.z.view.dialog.InterfaceEditDialog.initAndOpen(InterfaceEditDialog.java:122)
    at x.y.z.view.dialog.InterfaceDialog$2.mouseDoubleClick(InterfaceDialog.java:263)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:196)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4172)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3761)
    at org.eclipse.jface.window.Window.runEventLoop(Window.java:832)
    at org.eclipse.jface.window.Window.open(Window.java:808)
    at x.y.z.view.dialog.InterfaceDialog.open(InterfaceDialog.java:134)
    at x.y.z.view.dialog.InterfaceDialog.initAndOpen(InterfaceDialog.java:127)
    at x.y.z.handler.ManageInterfaceHandler.execute(ManageInterfaceHandler.java:46)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:247)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:229)
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:132)
    at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:149)
    at org.eclipse.core.commands.Command.executeWithChecks(Command.java:499)
    at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508)
    at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:210)
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.executeItem(HandledContributionItem.java:825)
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.handleWidgetSelection(HandledContributionItem.java:701)
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem.access$6(HandledContributionItem.java:685)
    at org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem$4.handleEvent(HandledContributionItem.java:613)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4172)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3761)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1151)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032)
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148)
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application.start(E4Application.java:164)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1438)