Вставьте в одну таблицу множество разных и соедините таблицу в спящий режим

#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. Я сделал то же самое, но у меня есть вопрос. Мне посоветовали реализовать шаблон одноэлементного дизайна, так что стоит ли использовать новое ключевое слово? есть ли лучший способ для этого?