Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 21.03.2015
Сообщений: 84

Связь многие ко многим

25.07.2015, 13:23. Показов 3577. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть Users и Course.
делаю связь многие ко многим.
Пользователь входит на странице courses.ftl , где отображаются курсы и рядом с ними кнопки Subscribe.
Т.е. на какой-то курс подписываются несколько пользователей.

Где и как мне нужно хранить информацию о подписчиках?

создать в классе Courses поле private ArrayList<User> subscribes = new ArrayList<User>(0);
и туда записывать пользователей ? но в базе данных где они будут храниться ?

или в третьей таблице USER_COURSE создать поле String Subscribe ? Тоже не понятно как туда записывать, если такого класса нет ?

Может кто-нибудь набросать кода , как это реализовать?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package com.amazon.entity;
 
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
 
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.persistence.JoinColumn;
@Entity
@Table(name="COURSES")
public class Course implements Serializable{
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue
    @Column(name="ID_COURSE")
    private int id;
    @Column(name="name")
    private String name;
    @Column(name="owner")
    private String owner;
    @Column(name="category")
    private String category;
    @Column(name="description")
    private String description;
    @Column(name="links")
    private String links;
    @Column(name="stateCourse")
    private String state;
    @Column(name="minSubscribers")
    private Integer minSubscribers;
    @Column(name="minAttendes")
    private Integer minAttendes;
     
    
    
    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(name = "USER_COURSE",  joinColumns = { 
            @JoinColumn(name = "ID_COURSE", nullable = false, updatable = false) }, 
            inverseJoinColumns = { @JoinColumn(name = "ID_USER", 
                    nullable = false, updatable = false)   })
    private Set<User> users = new HashSet<User>(0);
        
    public Course() {
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getOwner() {
        return owner;
    }
 
    public void setOwner(String owner) {
        this.owner = owner;
    }
 
    public String getCategory() {
        return category;
    }
 
    public void setCategory(String category) {
        this.category = category;
    }
    
    public String getDescription() {
        return description;
    }
 
    public void setDescription(String description) {
        this.description = description;
    }
 
    public String getLinks() {
        return links;
    }
 
    public void setLinks(String links) {
        this.links = links;
    }
    
    
     
 
    
    public String getState() {
        return state;
    }
 
    public void setState(String state) {
        this.state = state;
    }
 
    public Integer getMinSubscribers() {
        return minSubscribers;
    }
 
    public void setMinSubscribers(Integer minSubscribers) {
        this.minSubscribers = minSubscribers;
    }
    
    public Integer getMinAttendes() {
        return minAttendes;
    }
 
    public void setMinAttendes(Integer minAttendes) {
        this.minAttendes = minAttendes;
    }
 
    public Set<User> getUsers() {
        return users;
    }
 
    public void setUsers(Set<User> users) {
        this.users = users;
    }
 
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package com.amazon.entity;
 
@Entity
@Table(name="USERS")
public class User implements Serializable{
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue
    @Column(name="ID_USER")
    private int id;
    @Column(name="login")
    private String login;
    @Column(name="eMail")
    private String eMail;
    @Column(name="password")
    private String password;
    @Column(name="role")
    private String role;
    @ManyToMany(fetch = FetchType.EAGER, mappedBy = "users")
    private Set<Course> courses = new HashSet<Course>(0);
 
    public User() {
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getLogin() {
        return login;
    }
 
    public void setLogin(String login) {
        this.login = login;
    }
 
    public String geteMail() {
        return eMail;
    }
 
    public void seteMail(String eMail) {
        this.eMail = eMail;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    public String getRole() {
        return role;
    }
 
    public void setRole(String role) {
        this.role = role;
    }
 
    public Set<Course> getCourses() {
        return courses;
    }
 
    public void setCourses(Set<Course> courses) {
        this.courses = courses;
    }
 
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8"/>
    <link rel="stylesheet" type="text/css" href="./css/style.css"/>
    
     
  </head>
  <body>
    <div class="container">
      <header>
       <h1>
          Courses  
          <div class="logout">
            <span id="currentUserLogin">
              ${eMail}
            </span>
            <a href="logout.html">
              <i class="icon-off"></i>
            </a>
          </div>
        </h1>
      </header>
        
      <table class="table table-striped table-bordered">
        <thead>
         <tr>
            <th class="span1">Id</th>
             <th>Course</th>
             <th class="span3">Category</th>
             
             <th class="span1">Grade</th>
             <th class="span1">Action</th>
          </tr>
        </thead>
        
        <tbody>
        <#list ListCourses as course>
          <tr>
                    
          <td class="span1">${course.id}</td>
          <td><a href="courses/${course.id}.html">${course.name}</a>
          <td>
              ${course.category}
          </td> 
          <td>
             -?
          </td>
          <td>  
          <a class="btn btn-mini" href="courses/${course.id}/subscribe.html">Subscribe</a>
          </td>
          </tr>
          </#list>
         </tbody>
      </table>
    </div>
      
  </body>
</html>
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
@Controller
public class SubscriptionController {
    private static final Logger log = Logger
            .getLogger(SubscriptionController.class);
 
    @Autowired
    private CourseService courseService;
     
    @Autowired
    private UserService userService;
 
    @RequestMapping(value = "/courses/{id}/subscribe", method = RequestMethod.GET)
    public String subscribeCourse(Model model, HttpSession session,
            HttpServletRequest request, @PathVariable("id") Integer courseId) {
        model.addAttribute("eMail", session.getAttribute("eMail"));
 
        User user = userService.findUserByName(session.getAttribute("name").toString());
        model.addAttribute("user", user);
        model.addAttribute("Course", (Course) courseService.findCourseById(courseId));
        model.addAttribute("CourseId", courseService.haveCourseById(courseId));
        
        if (session.getAttribute("name") == null) {
            return "redirect:/login";
        } else {
            model.addAttribute("eMail", session.getAttribute("eMail"));
            return "subscribe";
        }
    }
 
    @RequestMapping(value = "/courses/{id}/subscribe", method = RequestMethod.POST)
    public String subscribeCoursePost(Model model, HttpSession session,
            HttpServletRequest request, @PathVariable("id") Integer courseId) {
        model.addAttribute("eMail", session.getAttribute("eMail"));
 
        User user = userService.findUserByName(session.getAttribute("name").toString());
        model.addAttribute("user", user);
        Course course = courseService.findCourseById(courseId);
 
                //????????
 
        return "redirect:/courses";
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.07.2015, 13:23
Ответы с готовыми решениями:

связь один-ко-многим в hibernate
Здравствуйте! Я знаю, что связь один-ко-многим в hibernate реализуется через join column или через join table. Есть ли другие способы...

Entity Framework 6. Code First. Связь один-ко-многим и многие-ко-многим одновременно
Здрасти. Есть таблица юзеров и объявлений. У юзера может быть множество объявлений. Здесь действует связь один-ко-многим. Но юзер также...

Связь многие-ко-многим
Здравствуйте! Какую ввести дополнительную сущность, чтобы избавиться от связи многие-ко-многим?

21
0 / 0 / 0
Регистрация: 21.03.2015
Сообщений: 84
25.07.2015, 22:11  [ТС]
Студворк — интернет-сервис помощи студентам
KEKCoGEN, а как используется третья таблица при связи многие ко многим ?

и что с моим кодом?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
25.07.2015, 22:21
Цитата Сообщение от goldenhawk Посмотреть сообщение
а как используется третья таблица при связи многие ко многим ?
что значит как используется? Связывает. В БД нет чистой связи Many-to-Many. Есть связь через доп. таблицу. Хайбернейт эту таблицу создает но в коде её как бы нет

Цитата Сообщение от goldenhawk Посмотреть сообщение
что с моим кодом?
Довольно много всякой кривости. Но для обучения и\или задания он норм.

Единственное что надо добавить hash и equals т.к вы используете hashset. Остальное лень расписывать т.к это больше относится к стилю написания а не функционалу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.07.2015, 22:21

Связь многие-ко-многим
Здравствуйте. Подскажите, пожалуйста, для организации связи &quot;многие-ко-многим&quot; обязательна дополнительная таблица, или можно без...

Связь многие ко многим
День добрый. Есть 2 таблицы &quot;описание&quot; и &quot;адрес&quot; и связь многое ко многим. При выполнении запроса, вместо необходимых адресов выдает весь...

Связь многие ко многим
Подскажите, тут есть связь многие-ко-многим,если да, то где?

Связь многие ко многим
Здравствуйте, нужно сделать выборку по жанрам. Для этого нужно реализовать связь многие ко многим(чтобы у каждого фильма могло быть...

Связь многие ко многим
Ребят, привет! Продолжаю писать веб-сервис. Есть следующий код: class MyContext : DbContext { public DbSet&lt;Post&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru