#java #spring-boot #hibernate #jpa #many-to-many
Вопрос:
Привет, я новичок в спящем режиме и пытаюсь создать приложение для отдыха.
У меня есть 3 таблицы в базе данных, как показано на рисунке выше.
Таблица ПОЛЬЗОВАТЕЛЕЙ имеет множество связей с таблицей ГРУПП, а USER_GROUP-это таблица ассоциаций.
Я использую ORM, Hibernate и CurdRepository.
Я могу вставить в таблицу пользователей и таблицу групп с помощью метода сохранения() CurdRepository.
Теперь я пытаюсь добавить строку только в таблицу ГРУПП и таблицу USER_GROUP. Может ли кто-нибудь направить меня в правильном направлении?
Например:
Я хочу добавить идентификатор группы в таблицу ГРУПП, а затем связать его с идентификатором пользователя
Допустим, я хочу вставить (10) идентификатор группы в ГРУППЫ и (14,10) в таблицу USER_GROUP.
Выполнимо ли это с помощью ORM, если да, то как?
Заранее спасибо
Ответ №1:
В Интернете есть много статей именно об этой модели, чтобы продемонстрировать, как использовать режим гибернации. Вот одна статья, которую я быстро нашел, поискав в Google «пример группы пользователей hibernate»: https://www.codejava.net/frameworks/hibernate/hibernate-many-to-many-association-annotations-example
Ответ №2:
Чтобы использовать существующую соединительную таблицу, USE_GROUP, сущность пользователя будет выглядеть следующим образом .
@Entity
public class Users {
@Id
private Integer userid;
private String password;
@ManyToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST })
@JoinTable(name = "USER_GROUP", joinColumns = { @JoinColumn(name = "USERID") },
inverseJoinColumns = { @JoinColumn(name = "GROUPID") })
private Set<Groups> groups;
// Getter, Setter
}
А затем клиентский код, добавляющий нового пользователя и группу, будет выглядеть примерно так, как показано ниже.
User user = new User()
// set password , etc
Set<Groups> groups = new HashSet<>();
Group group = new Group();
// set
groups.add(group);
user.setGroups(groups);
userRepository.save(user);
Комментарии:
1. Я сделал то же самое, но у меня есть вопрос. Мне посоветовали реализовать шаблон одноэлементного дизайна, так что стоит ли использовать новое ключевое слово? есть ли лучший способ для этого?