Удалить / удалить объекты с JPA- остаться в базе данных - PullRequest
0 голосов
/ 26 января 2012

Моя сущность JPA:

@Entity
public class Test implements Serializable {

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

    @Lob
    public byte[] data;

}

Теперь предположим, что я храню 100 записей в моей базе данных, и каждая запись содержит 3 МБ.

SELECT x FROM Test x возвращает 100 записей и базу данных (в файловой системе) имеет размер около 300 МБ (как и ожидалось).

Следующим шагом является удаление всех 100 записей путем вызова: entityManager.remove(test) для каждой записи.

SELECT x FROM Test xтеперь приводит к пустой таблице, НО база данных все еще имеет размер 300 МБ!Во-первых, если я отброшу таблицу, база данных будет сокращена до исходного состояния.

Что здесь не так?Если я удаляю записи, они действительно не будут удалены?!

Я пробовал с JavaDB и Oracle XE, и я использую EclipseLink.

Ответы [ 2 ]

0 голосов
/ 26 января 2012

База данных не удаляет данные физически (очевидно). Когда и как это делается, зависит от базы данных и ее настройки, например, это может быть вызвано определенными порогами размера файла, ручными компактными командами или запланированными задачами обслуживания. Это полностью не зависит от JPA.

0 голосов
/ 26 января 2012

Для меня я посмотрю, была ли транзакция JPA успешно завершена, и выберу число сущностей из консоли базы данных для двойной проверки.

Если записи таблицы на самом деле не исчезли, это может означать, что у вас могут возникнуть проблемы с удалением записей.Попробуйте зафиксировать или очистить его.

Если записи в таблице уже ушли, но дисковое пространство базы данных остается, значит, это может быть из-за политик управления ассоциированным пространством базы данных, а затем проверьте конфигурацию базы данных, чтобы узнать, как получить это пространство.выпущен, как только записи ушли.

...