2013-07-30 50 views
0

我想從我的應用程序中刪除一個實體,並且出現一些錯誤。在Hibernate 4中刪除期間導致TransientObjectException的原因是什麼?

的實體如下:

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對象的唯一標識。

現在,爲什麼hibernate會檢查AppTimeZone是否髒?

我的目標是隻刪除一個ClinicInfo

回答

1

很可能您的實體對象處於分離狀態,您無法刪除它。

您只能刪除持久對象。如果你有一個分離的對象,你需要首先通過調用merge()

+0

感謝指針。不過,我決定用'hql query'重寫刪除函數,只接受'Id'。 – abiieez

相關問題