Я полагаю, что это один из недостатков использования отношения ManyToMany, когда вам нужно обновить таблицу соединений.
Я бы посоветовал создать объект из таблицы соединений, и тогда у вас было бы толькочтобы создать объект объединения и сохранить его:
public class ProductListItem {
@ManyToOne(...)
private Product product;
@ManyToOne(...)
private ProductList productList;
...
}
И у вас все еще мог бы быть временный получатель, который возвратил бы список продуктов из продукта:
public class Product {
@OneToMany(...)
private Set<ProductListItem> items;
@Transient
public Set<ProductList> getProductLists() {
Set<ProductList> list = new LinkedHashSet<ProductList>();
for(ProductListItem item : items) {
list.add(item.getProductList());
}
return Collections.unmodifiableSet(list);
}
...
}
То же самое для другогосторона многотомного отношения.
Тогда ваша операция сохранения - это всего лишь вопрос создания ProductListItem и сохранения его, который ничего не загрузит и требует только одну вставку.
Будьте осторожны с вашимиуже существующие hql-запросы: если они использовали ссылку Product <-> ProductList, они больше не будут работать.
, если вы хотите сохранить отношение ManyToMany, вы должны посмотреть: http://josephmarques.wordpress.com/2010/02/22/many-to-many-revisited/ (я никогда не пробовал это решение)