![](/img/trans.png)
[英]After calling a stored procedure by Entity Framework, tables update in database, but entities remain as they were
[英]Delete/Remove entities with JPA- remain in database
我的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的大小(按預期)。
下一步是通過調用每個條目的entityManager.remove(test)
來刪除所有100個條目。
SELECT x FROM Test x
現在導致一個空表,但是數據庫仍然有300 MB的大小! 首先,如果我刪除表,數據庫將縮小到初始狀態。
這是怎么了 如果我刪除條目,它們真的不會被刪除嗎?
我嘗試使用JavaDB和Oracle XE,並且正在使用EclipseLink。
對我來說,我將查看JPA事務是否已成功提交,並從數據庫控制台中選擇實體計數以再次檢查。
如果表記錄沒有真正消失,則意味着刪除記錄可能會遇到一些麻煩。 嘗試提交事務或刷新它。
如果表記錄已經消失但數據庫磁盤空間仍然存在,則意味着它可能是數據庫空間關聯管理策略的原因,然后檢查數據庫配置以查看記錄消失后如何釋放空間。
數據庫不會物理刪除數據(顯然)。 何時以及如何完成取決於數據庫及其設置,例如,可能由某些文件大小閾值,手動緊湊命令或計划的維護任務觸發。 這完全獨立於JPA。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.