2015-06-03 2 views
0

У меня проблемы со спящим множеством многих. Когда я пытаюсь удалить элемент из отношения, hibernate загружает всю коллекцию (слишком большой). Вот пример: supose А имеет многие ко многим с соотношением BСпящий режим: удалить элемент из коллекции без инициализации

public class A { 

@ManyToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, 
    CascadeType.REFRESH }, fetch = FetchType.LAZY) 
@JoinTable(name = "a_b", joinColumns = { @JoinColumn(name = "a_id", referencedColumnName = "id", unique = false) }, inverseJoinColumns = { @JoinColumn(name = "b_id", referencedColumnName = "id", unique = true) }) 
@Sort(type = SortType.COMPARATOR, comparator = AscBComparator.class) 
private List<B> listB; 

public List<B> getListB() { 
    return listB; 
} 

} 

// in other part 

A.getListB().remove(concreteB); 

Когда программа достигает A.getListB() спящий режим загружает всю коллекцию. Есть ли вообще избежать этого? Я просто хочу удалить строку из таблицы join.

Я пробовал с: @BatchSize, чтобы ограничить размер коллекции, но в конце концов я понял, что он не работает, как я ожидал.

@LazyCollection (LazyCollectionOption.EXTRA), не работает

+0

почему бы не удалять непосредственно B? –

+0

, потому что B все еще является частью моего домена, я не могу его удалить. Просто B больше не связан с A. – Daniel

ответ

0

Если отношение между А и В является двунаправленным, принеси B, а затем обновить его изменить значение его A, сделать это нулевое значение или другое значение , некоторые вещи, как это:

B b = bService.getBById(id); 
b.setA(null); // or b.setA(anotherValueOfA); 
bService.update(b); 

он должен работать

+0

Отношение не двунаправлено, в домене не имеет смысла перемещаться из B в A. Но если я не найду другого решения, я сделаю этот путь в порядке для повышения производительности. Другая идея заключается в создании инструкции sql delete. – Daniel

+0

Я думаю, что это уникальное решение. –

+0

Я реализовал biderectional, но когда я сохраняю B, он не удаляет строку в таблице соединений. Есть идеи? – Daniel

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