Я получаю следующую ошибку при сохранении объекта с помощью Hibernate.
объект ссылается на несохраненный временный экземпляр — сохраните временный экземпляр перед очисткой: com.quintiles.ra.model.Dashboard
Это мой журнал ошибок:
Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.quintiles.ra.model.Dashboard
at org.hibernate.engine.internal.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:294) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final]
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:537) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final]
at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:311) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final]
at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:321) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final]
at org.hibernate.type.TypeHelper.findDirty(TypeHelper.java:294) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final]
at org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:4243) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final]
at org.hibernate.event.internal.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:546) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final]
at org.hibernate.event.internal.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:232) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final]
at org.hibernate.event.internal.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:159) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final]
at org.hibernate.event.internal.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:231) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final]
at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:102) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final]
at org.hibernate.event.internal.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:61) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final]
at org.hibernate.internal.SessionImpl.autoFlushIfRequired(SessionImpl.java:1191) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final]
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1675) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final]
at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:380) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final]
at com.quintiles.ra.service.RaService.findProtocolQuarantine(RaService.java:2513) ~[ra-service-9.02.000.002-SNAPSHOT.jar:na]
at com.quintiles.analytics.vaadin.newui.collectionfilter.DataContextState.getQuarantinedProtocols(DataContextState.java:109) ~[classes/:na]
at com.quintiles.analytics.vaadin.newui.chart.ChartsLayout.getQuarantineProtocols(ChartsLayout.java:1069) ~[classes/:na]
at com.quintiles.analytics.vaadin.newui.chart.ChartsLayout.(ChartsLayout.java:254) ~[classes/:na]
at com.quintiles.analytics.vaadin.newui.dashboard.DashboardLayout.(DashboardLayout.java:158) ~[classes/:na]
at com.quintiles.analytics.vaadin.newui.MonPage.makeMonPage(MonPage.java:170) ~[classes/:na]
at com.quintiles.analytics.vaadin.newui.MonPage.(MonPage.java:101) ~[classes/:na]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_432]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_432]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_432]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_432]
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142) ~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]
... 64 common frames omitted
Я получаю следующую ошибку при сохранении объекта с помощью Hibernate. объект ссылается на несохраненный временный экземпляр — сохраните временный экземпляр перед очисткой: com.quintiles.ra.model.Dashboard Это мой журнал ошибок: [code]Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.quintiles.ra.model.Dashboard at org.hibernate.engine.internal.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:294) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final] at org.hibernate.type.EntityType.getIdentifier(EntityType.java:537) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final] at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:311) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final] at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:321) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final] at org.hibernate.type.TypeHelper.findDirty(TypeHelper.java:294) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final] at org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:4243) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final] at org.hibernate.event.internal.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:546) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final] at org.hibernate.event.internal.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:232) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final] at org.hibernate.event.internal.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:159) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final] at org.hibernate.event.internal.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:231) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final] at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:102) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final] at org.hibernate.event.internal.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:61) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final] at org.hibernate.internal.SessionImpl.autoFlushIfRequired(SessionImpl.java:1191) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final] at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1675) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final] at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:380) ~[hibernate-core-4.3.4.Final.jar:4.3.4.Final] at com.quintiles.ra.service.RaService.findProtocolQuarantine(RaService.java:2513) ~[ra-service-9.02.000.002-SNAPSHOT.jar:na] at com.quintiles.analytics.vaadin.newui.collectionfilter.DataContextState.getQuarantinedProtocols(DataContextState.java:109) ~[classes/:na] at com.quintiles.analytics.vaadin.newui.chart.ChartsLayout.getQuarantineProtocols(ChartsLayout.java:1069) ~[classes/:na] at com.quintiles.analytics.vaadin.newui.chart.ChartsLayout.(ChartsLayout.java:254) ~[classes/:na] at com.quintiles.analytics.vaadin.newui.dashboard.DashboardLayout.(DashboardLayout.java:158) ~[classes/:na] at com.quintiles.analytics.vaadin.newui.MonPage.makeMonPage(MonPage.java:170) ~[classes/:na] at com.quintiles.analytics.vaadin.newui.MonPage.(MonPage.java:101) ~[classes/:na] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_432] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_432] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_432] at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_432] at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142) ~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE] ... 64 common frames omitted [/code] Для справки, прикрепив ra.model.Dashboard [code]package com.quintiles.ra.model;
public void setCategoryCollection(CategoryCollection categoryCollection) { this.categoryCollection = categoryCollection; }
@Column(name="SHOW_LABEL") @Type(type="yes_no") public Boolean getShowLabel() { return showLabel; }
public void setShowLabel(Boolean showLabel) { this.showLabel = showLabel; }
@Column(name="MENU_ID") public Long getDashboardMenu() { return dashboardMenu; }
public void setDashboardMenu(Long dashboardMenu) { this.dashboardMenu = dashboardMenu; }
@Column(name="USESHELP") @Type(type="yes_no") public Boolean getUsesHelp() { return usesHelp; }
@Lob @Column(name="WHEREFORQUICKFILTER") public String getWhereClauseForQF() { return whereClauseForQF; }
public void setWhereClauseForQF(String whereClauseForQF) { this.whereClauseForQF = whereClauseForQF; }
@Column(name="COMMNTD_BY") public String getCommentedBy() { return commentedBy; } public void setCommentedBy(String commentedBy) { this.commentedBy = commentedBy; }
public void setUsesHelp(Boolean usesHelp) { this.usesHelp = usesHelp; }
@Override public String toString() { return "Dashboard [id=" + id + ", name=" + name + ", displayLabel=" + displayLabel + "]"; }
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((id == null) ? 0 : id.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Dashboard other = (Dashboard) obj; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; return true; }
@ManyToMany(fetch=FetchType.EAGER) @JoinTable(name="MENUITEM_DASHBOARD_LINK",joinColumns={ @JoinColumn(name="DASHBOARD_ID",referencedColumnName="ID") },inverseJoinColumns={ @JoinColumn(name="MENUITEM_ID",referencedColumnName="ID") }) public Set getMenuItems() { if(menuItems == null)menuItems = new HashSet(); return menuItems; }
public void setMenuItems(Set menuItems) { this.menuItems = menuItems; }
@Column(name="DISPLAY_LABEL") public String getDisplayLabel() { return displayLabel; }
public void setDisplayLabel(String displayLabel) { this.displayLabel = displayLabel; }
@ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="CSSID") @Fetch(FetchMode.JOIN) public DashboardStyle getDashboardStyle() { return dashboardStyle; }
public void setDashboardStyle(DashboardStyle dashboardStyle) { this.dashboardStyle = dashboardStyle; }
public void setViaForm(Boolean viaForm) { this.viaForm = viaForm; } } [/code] PS: Я также пробовал добавить cascade=CascadeType.ALL ко всем условиям ManyToOne, OneToOne и т. д., но, похоже, это не работает.