Как лучше всего использовать hibernate в простом сценарии (вопросы в конце поста)
Допустим, у меня есть эта модель данных в коде:
class UserGroup
{
int id;
String name;
}
class User
{
int id;
String userName;
}
Для классов User и UserGroup таблица базы данных underyling будет выглядеть точно так, как определено в приведенных выше классах.
Теперь пользователь может принадлежать к одной или нескольким группам пользователей.
В таблице базы данных с именем USERGROUPMAP это может быть представлено как:
USERID INT
USERGROUPID INT
В коде, как я буду представлять это отношение?
Возможные варианты:
Вариант 1: (класс UserGroup содержит коллекцию принадлежащих ему пользователей)
class UserGroup
{
int id;
String name;
UserCollection usersThatBelongInThisGroup;
}
Вариант 2: (класс User содержит коллекцию групп, к которым он принадлежит)
class User
{
int id;
String name;
UserGroupCollection groupsThatIBelongTo;
}
Вариант 3: (Класс, который представляет таблицу базы данных с именем USERGROUPMAP. Чтобы выяснить, принадлежит ли пользователь группе и т. Д., Этот класс необходимо проверить в коде)
class UserGroupMap //Class that represents the USERGROUPMAP table.
{
int userId;
int userGroupId;
}
Вопросы:
(A) Если я использую третий вариант, то в чем преимущество использования hibernate (ведь это просто еще один класс, представляющий таблицу)?
Я имею в виду, что я должен иметь возможность определить коллекцию в классе Users или UserGroup, а hibernate должен позаботиться о вставке / обновлении в USERGROUPMAP для меня. Поэтому я думаю, что это исключает вариант 3.
(B) Если я использую 1-й вариант, то какой смысл хранить информацию о группах во 2-м варианте? (так как это может стать избыточным)
(C) Точно так же, если я использую 2-й вариант, тогда какой смысл собирать пользователей в 1-м варианте?
Как решить эту проблему в ORM, например, в режиме гибернации?