0

我正在尝试从我的应用程序中删除一个实体,但出现了一些错误。

实体如下所示:

临床信息

@Entity
@Table
public class ClinicInfo extends PersistentObject {

    private static final long serialVersionUID = -3352666863795986217L;

    @ManyToOne
    @JoinColumn(name="appTimezoneId")
    @NotNull
    private 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 和版本。

每当我尝试删除 aclinicInfo时,都会收到以下错误:

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。

现在,为什么休眠会检查 AppTimeZone 是否脏?

我的目标只是删除一个ClinicInfo.

4

1 回答 1

1

很可能您的实体对象处于分离状态,您无法删除它。

您只能删除持久对象。如果您有一个分离的对象,您需要首先通过调用使其持久化merge()

于 2013-07-30T04:28:24.783 回答