使用JPA删除/删除实体 - 保留在数据库中

时间:2012-01-26 00:39:02

标签: database jpa entity eclipselink

我的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。

2 个答案:

答案 0 :(得分:0)

对我来说,我将看到JPA事务是否已成功提交,并从数据库控制台中选择实体计数以进行双重检查。

如果表记录没有真正消失,则意味着您可能在删除记录时遇到一些问题。尝试提交trasnaction或刷新它。

如果表记录已经消失但数据库磁盘空间仍然存在,则意味着它可能是数据库空间关联管理策略的becoz,然后检查数据库配置,了解一旦记录消失后如何释放空间。

答案 1 :(得分:0)

数据库不会物理删除数据(显然)。何时以及如何完成取决于数据库及其设置,例如它可以由某些文件大小阈值,手动压缩命令或预定维护任务触发。这完全独立于JPA。