2012-01-26 136 views
0

我JPA實體:刪除/刪除與JPA-實體保留在數據庫

@Entity 
public class Test implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long id; 

    @Lob 
    public byte[] data; 

} 

現在,讓我們說我存儲100個條目在我的數據庫,並且每個條目包含3 MB。

SELECT x FROM Test x返回100個條目,數據庫(在文件系統上)的大小約爲300 MB(如預期的那樣)。

下一步是通過調用每個條目來刪除全部100個條目:entityManager.remove(test)

SELECT x FROM Test x現在導致一個空表,但數據庫仍然有300 MB的大小!首先,如果我刪除表格,數據庫將縮小到初始狀態。

這裏怎麼回事?如果我刪除條目,它們不會真的被刪除?!

我嘗試使用JavaDB和Oracle XE,並且使用EclipseLink。

回答

0

對我來說,我會看到JPA事務是否成功提交,並從數據庫控制檯中選擇實體計數以進行雙重檢查。

如果表記錄沒有真正消失,這意味着刪除記錄可能會有一些麻煩。嘗試提交trasnaction或刷新它。

如果表記錄已經消失但數據庫磁盤空間仍然存在,意味着它可能是數據庫空間關聯管理策略的原因,那麼請檢查數據庫配置,看看記錄消失後如何獲取空間。

0

數據庫不會物理刪除數據(顯然)。何時以及如何完成取決於數據庫及其設置,例如,它可能會受到特定文件大小閾值,手動壓縮命令或計劃維護任務的觸發。這完全獨立於JPA。