Использование памяти каскада Hibernate = УДАЛИТЬ - PullRequest
1 голос
/ 14 марта 2012

У меня есть сложная модель сущности с несколькими сопоставленными коллекциями следующего вида:

public class RoleDAO extends AbstractEntity {
    // ...

    public static final String PROPERTY_ROLE = "role";

    @ManyToOne
    private Role role;

    // ...
}

public class Role extends AbstractEntity {
    // ...

    @OptimisticLock(excluded = true)
    @LazyCollection(LazyCollectionOption.EXTRA)
    @OneToMany(mappedBy = RoleDAO.PROPERTY_ROLE, cascade = { CascadeType.REMOVE })
    private List<RoleDAO> roleDAOs = new ArrayList<RoleDAO>();

    // ...
}

Существует приблизительно 20 Role экземпляров с 20 000 RoleDOA экземпляров для каждого из них.Всякий раз, когда я пытаюсь удалить один объект Role, используя * 1006, Hibernate требует огромного объема памяти.Используя jProfiler для мониторинга удаления, я обнаружил, что Hibernate, похоже, создает гораздо больше RoleDAO объектов, чем ожидалось - если не все 400 000 из них.

Нормально ли это поведение для Hibernate?

Я работал над этим, удалив каскад и удалив все связанные записи RoleDAO, используя именованный запрос перед вызовом em.remove() - но это делает обработку намного более сложной, связанной с полной моделью.

Протестировано с Hibernate v3.3.1.GA в JBoss v4.2.3 ... планируем перейти на JBoss v7 и текущий Hibernate в ближайшем будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...