我正在尝试从我的应用程序中删除一个实体,但我遇到了一些错误。
实体如下所示:
ClinicInfo
@Entity
@Table
public class ClinicInfo extends PersistentObject {
private static final long serialVersionUID = -3352666863795986217L;
@ManyToOne
@JoinColumn(name="appTimezoneId")
@NotNull
private AppTimeZone appTimeZone;
...
...
...
...
}
AppTimeZone
@Entity
@Table
public class AppTimeZone extends PersistentObject {
private static final long serialVersionUID = 212088957599604285L;
@Column(nullable = false, unique = true)
@NotEmpty
private String zoneID;
...
...
}
在这种情况下, PersistentObject
包含ID和版本。
每当我尝试删除clinicInfo
时,都会收到以下错误:
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.myapp.entity.AppTimeZone
at org.hibernate.engine.internal.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:249)
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:459)
at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:275)
at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:286)
at org.hibernate.type.TypeHelper.findDirty(TypeHelper.java:294)
在ClinicInfo
删除期间,我只设置了AppTimeZone对象的ID。
现在,为什么Hibernate会检查AppTimeZone是否脏了?
我的目标只是删除ClinicInfo
。
答案 0 :(得分:1)
很可能你的实体对象处于分离状态,你无法删除它。
您只能删除持久对象。如果您有一个分离的对象,则需要首先通过调用merge()