Как лучше всего моделировать дружбу с помощью Java Hibernate и JPA - PullRequest
0 голосов
/ 04 августа 2020

Допустим, у меня есть сущность Person.

И человек может иметь отношения «Дружба» с одним или несколькими другими людьми.

Я бы смоделировал это, скажем, с помощью записи в таблице

| Person Id 1 | Person Id 2 |

Но семантически, если человек 1 дружит с человеком 2

| Person Id 1 | Person Id 2 |

, это то же самое, что сказать, что человек 2 дружит с человеком 1

| Person Id 2 | Person Id 1 |

Конечно, есть много способов в Java и в запросе, например, ((person1=x AND person2=y) OR (person1=y AND person2=x)), чтобы я удостоверился, что эта эквивалентность соблюдается. Но какой более эффективный способ смоделировать этот в самой базе данных и в последующем репозитории, JPQL Queries и т. Д. c.

Подводя итог ; Я хочу иметь возможность проверить, дружит ли человек 1 с человеком 2, без двух проверок - (дружит ли человек 1 с человеком 2) или (дружит ли человек 2 с человеком 1). Идиоматично, я просто хочу сказать (являются друзьями человека 1 и человека 2).

Я хочу неявно смоделировать эквивалентность: А дружит с В, тогда Б автоматически дружит с А.

1 Ответ

1 голос
/ 04 августа 2020
  • Следующий класс физических лиц
    @Entity
    public class Person {

    //Id and properties

      @ManyToMany
      @JoinTable(name="friendship", 
                joinColumns={@JoinColumn(name="person_id")}, 
                inverseJoinColumns={@JoinColumn(name="friend_id")})
       private Set<Person> friends = new HashSet<Person>();

       // Getter and Setter methods
     }
  • Он сгенерирует таблицу person и таблицу friendship. person таблица будет содержать только информацию, относящуюся к Person и friendship, таблица будет иметь только два столбца person_id и friend_id для сохранения связи.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...