2014-02-13 2 views
0

У меня есть 2 класса сущности (AEntity для таблицы A и BEntity для таблицы B). Таблица A связана с таблицей B. Таким образом, класс AEntity имеет список объектов BEntity и объявлен как показано ниже.переопределить операцию удаления объекта в структуре JPA

@OneToMany (mappedBy = "AEntity", cascade = CascadeType.REMOVE, fetch = FetchType.LAZY) private List items = new ArrayList();

Если я удалю AEntity, используя «entityManager.remove (aEntity)», это также удалит BEntity для таблицы B.

Это происходит правильно для небольшого количества данных. Но если данные будут увеличены, это приведет к сбою с исключением «Записи о работе в координаторе транзакций (увеличение MaxNoOfConcurrentOperations)».

Это исключение происходит потому, что он удаляет большое количество данных за один раз. Так что я хочу переопределить операцию удаления/удаления BEntity и хочу обрабатывать удаление с помощью разбивки на страницы, то есть если общее число из 1 не хватает строк должно быть удалено, я хочу удалить 1000 в одной транзакции, а затем 1000.

Как я могу это достичь. Пожалуйста, помогите

+0

Можете ли вы удалить партии B в одном запросе базы данных, например список из 1000 объектов B? Если да, то у меня есть решение для вас. –

+0

да, я могу удалить – kaka

ответ

0

решения описываются с псевдокодом следующим образом (я не использовать технологию, так что я могу только поделиться алгоритмом):

batchSize <- 1000 
while A.listOfB.size() > batchSize do 
    tempList <- A.listOfB.copyBatch(batchSize) 
    tempList.deleteAll() 
    A.listOfB.deleteBatch(batchSize) 
end while 
A.delete() 

Я надеюсь, что алгоритм легко понять.

Смежные вопросы