Есть несколько способов сделать это, и тот, который вы выберете, вероятно, будет иметь какое-то отношение к вам, как вы хотите обновить отношения.
У вас будет таблица PERSON иеще один называется ДРУЖБА.Таблица FRIENDSHIP будет иметь два столбца, идентифицирующих двух вовлеченных людей.Проблема, в двух словах, заключается в том, что если у вас есть значения X, Y в таблице FRIENDSHIP, это также подразумевает Y, X.
Одна из стратегий состоит в том, чтобы сохранить только одну из двух строк в FRIENDSHIP и определитьправило для определения, какой это.Правило может быть таким: X всегда должно быть меньше Y, поэтому, чтобы установить дружбу между человеком 1 и человеком 2, вы всегда должны хранить 1,2, а не 2,1.Затем вы можете либо определить две коллекции, либо создать представление поверх FRIENDSHIP, которое будет выглядеть примерно так: SELECT P1, P2 FRI FRIENDSHIP UNION SELECT P2, P1 FROM FRIENDSHIP и иметь одну коллекцию, ссылающуюся на это.
Другая стратегияэто просто сохранить X, Y и Y, X в таблице и использовать триггер для добавления второго, когда Hibernate вставляет первый.В этом случае вы можете просто иметь одну коллекцию, ссылающуюся на один из двух столбцов, позволить Hibernate обновить ее и поверить, что база данных исправит ситуацию, чтобы коллекция выглядела правильно с точки зрения другого человека.