У меня есть отношение "многие ко многим", определенное между двумя объектами с использованием таблицы ассоциации и cascade = "save-update".
Entity1 содержит список Entity2, и, наоборот, Entity2 содержит список Entity1. SQL, выводимый из этого потока операций, выглядит нормально ...
- Создание объекта Entity1 и Entity2
- Добавить Entity2 в список на Entity1
- Вызов сеанса. Сохранение на Entity1
-> Операторы вставки выполняются для обеих сущностей, а затем в таблицу сопоставлений вставляется запись, связывающая их вместе.
Однако, если я сначала вызову сеанса. Сохраните в Entity2, добавьте его в список, затем вызовите сеанс. Сохраните в Entity1 дополнительный прогон инструкции UPDATE, который устанавливает все значения Entity2 точно в так же, как то, что было вставлено в начале.
Хотя это и не вызывает каких-либо проблем, это дополнительный запрос, снижающий производительность. Я играл с обратным атрибутом, но это не устраняет дополнительный оператор обновления. В настоящее время обе стороны имеют значение inverse = "false", так как я хочу, чтобы таблица ассоциации обновлялась независимо от того, какая сущность сохранена.
Есть идеи?