Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841

ManyToMany связь, удаление

25.05.2016, 14:29. Показов 3240. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Не могу корректнопроизвести удаление, с есть сущности Project
Кликните здесь для просмотра всего текста
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
package com.sprsec.model;
 
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
 
@Entity
@Table(name = "project")
public class Project
{
    @Id
    @GeneratedValue
    @Column
    private Integer id;
 
    @Column
    private String nameOfTheProject;
 
    @Column
    private String descriptionOfTheProject;
 
    @OneToOne
    @JoinColumn(name = "leadOfTheProject_id")
    private User leadOfTheProject;
 
    //cascade = CascadeType.ALL
    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name="project_user",
            joinColumns = @JoinColumn(name="proj_id"),
            inverseJoinColumns = @JoinColumn(name="usr_id")
    )
    private Set<User> usersInTheCurrentProject = new HashSet<User>(0);
 
    @OneToMany(fetch = FetchType.EAGER, mappedBy = "projectOfTheIssue")
    private Set<Issue> issuesSet = new HashSet<Issue>(0);
 
    public Project() {}
 
    public Integer getId() {
        return id;
    }
 
    public Set<Issue> getIssuesSet() {
        return issuesSet;
    }
 
    public void setIssuesSet(Set<Issue> issuesSet) {
        this.issuesSet = issuesSet;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
 
    public String getNameOfTheProject() {
        return nameOfTheProject;
    }
 
    public void setNameOfTheProject(String nameOfTheProject) {
        this.nameOfTheProject = nameOfTheProject;
    }
 
    public String getDescriptionOfTheProject() {
        return descriptionOfTheProject;
    }
 
    public void setDescriptionOfTheProject(String descriptionOfTheProject) {
        this.descriptionOfTheProject = descriptionOfTheProject;
    }
 
    public User getLeadOfTheProject() {
        return leadOfTheProject;
    }
 
    public void setLeadOfTheProject(User leadOfTheProject) {
        this.leadOfTheProject = leadOfTheProject;
    }
 
    public Set<User> getUsersInTheCurrentProject() {
        return usersInTheCurrentProject;
    }
 
    public void setUsersInTheCurrentProject(Set<User> usersInTheCurrentProject) {
        this.usersInTheCurrentProject = usersInTheCurrentProject;
    }
}

User
Кликните здесь для просмотра всего текста
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
package com.sprsec.model;
 
import com.sprsec.model.enums.RoleOfTheUser;
 
import javax.persistence.*;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
 
@Entity
@Table(name="users")
public class User {
 
    @Id
    @GeneratedValue
    @Column
    private Integer id;
 
    @Column
    private String login;
 
    @Column
    private String password;
 
    @Column
    private String firstName;
 
    @Column
    private String lastName;
 
    @Column
    private String email;
 
    @Column(name = "date_of_registration")
    private Date dateOfRegistration = setDateByRegistration();
 
    @ElementCollection(fetch = FetchType.EAGER)
    @Enumerated(EnumType.STRING)
    private Set<RoleOfTheUser> rolesOfTheUser = setDefaultRoles();
 
    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(name="project_user",
            joinColumns = @JoinColumn(name="usr_id"),
            inverseJoinColumns = @JoinColumn(name="proj_id")
    )
 
    private Set<Project> userProjects = new HashSet<Project>(0);
 
    @OneToMany(fetch = FetchType.EAGER, mappedBy = "fixerOfTheIssue")
    private Set<Issue> issuesToFix = new HashSet<Issue>(0);
 
    @OneToMany(fetch = FetchType.EAGER, mappedBy = "testerOfTheIssue")
    private Set<Issue> issuesToTest = new HashSet<Issue>(0);
 
    public User() {    }
 
    public Set<Project> getUserProjects() {
        return userProjects;
    }
 
    public void setUserProjects(Set<Project> userProjects) {
        this.userProjects = userProjects;
    }
 
    public Set<Issue> getIssuesToFix() {
        return issuesToFix;
    }
 
    public void setIssuesToFix(Set<Issue> issuesToFix) {
        this.issuesToFix = issuesToFix;
    }
 
    public Set<Issue> getIssuesToTest() {
        return issuesToTest;
    }
 
    public void setIssuesToTest(Set<Issue> issuesToTest) {
        this.issuesToTest = issuesToTest;
    }
 
    private static Set<RoleOfTheUser> setDefaultRoles() {
        Set<RoleOfTheUser> defaultRoles = new HashSet<RoleOfTheUser>();
        defaultRoles.add(RoleOfTheUser.ROLE_USER);
        return defaultRoles;
    }
 
    private static Date setDateByRegistration(){
        return new Date();
    }
 
    public String getFirstName() {
        return firstName;
    }
 
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
 
    public String getLastName() {
        return lastName;
    }
 
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
 
    public String getEmail() {
        return email;
    }
 
    public void setEmail(String email) {
        this.email = email;
    }
 
    public Date getDateOfRegistration() {
        return dateOfRegistration;
    }
 
    public void setDateOfRegistration(Date dateOfRegistration) {
        this.dateOfRegistration = dateOfRegistration;
    }
 
    public Integer getId() {
        return id;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
 
    public Set<RoleOfTheUser> getRolesOfTheUser() {
        return rolesOfTheUser;
    }
 
    public void setRolesOfTheUser(Set<RoleOfTheUser> rolesOfTheUser) {
        this.rolesOfTheUser = rolesOfTheUser;
    }
 
    public String getLogin() {
 
        return login;
    }
 
    public void setLogin(String login) {
        this.login = login;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    @Override
    public String toString() {
        return getFirstName() + " " + getLastName();
    }
}

с добавление все нормально, делаю так
Java
1
project.getUsersInTheCurrentProject().add(userService.getUser(login.trim()));
пробую удалить подобно, как при добавление, так
Java
1
2
3
projectService.getProject(idProject).getUsersInTheCurrentProject().remove(userService.getUser(idUser));
 
        projectService.updateProject(projectService.getProject(idProject));
но удаление не происходит. Как правильно это делаеться? Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.05.2016, 14:29
Ответы с готовыми решениями:

Hibernate ManyToMany
Помоге пожалуйста или укажите на нормальный рабочий пример. Создавал аннотацией отношения (по некоторым примерам) многие ко многим,...

[Hibernate] Не идет запись в joinTable @ManyToMany
User @Entity @Table(name = &quot;users&quot;) public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) ...

[Hibernate & Spring Data] Получить список объектов сущности из ManyToMany
Сущность User @Entity @Table(name = &quot;users&quot;) public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) ...

9
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530
25.05.2016, 18:55
Я не видел полностью кода этих процедур
Java
1
2
projectService.getProject(idProject).getUsersInTheCurrentProject().remove(userService.getUser(idUser));
projectService.updateProject(projectService.getProject(idProject));
Но если они находятся в пределах одной транзакции, то 2я процедура вытягивает свежие данные из базы и пытается их же сохранить.

У Вас ужасные именования в бд.
1
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
25.05.2016, 19:00  [ТС]
Цитата Сообщение от Любопытный Посмотреть сообщение
Я не видел полностью кода этих процедур
Вы имеете в виду реализацию в дао?
0
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530
25.05.2016, 19:06
Цитата Сообщение от asics Посмотреть сообщение
Вы имеете в виду реализацию в дао?
Насколько я понял, Вы пытаетесь использовать то, что хибернейт сохраняет persisted объекты по окончанию сессии.

Добавлено через 58 секунд
В общем покажите что у Вас в getProject и updateProject
0
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
25.05.2016, 19:09  [ТС]
Цитата Сообщение от Любопытный Посмотреть сообщение
Насколько я понял, Вы пытаетесь использовать то, что хибернейт сохраняет persisted объекты по окончанию сессии.
По сути да, я делал по примеру, с добавлением все хорошо получаеться, я так понимаю, но как делать удаление я не могу найти.

Добавлено через 1 минуту
Цитата Сообщение от Любопытный Посмотреть сообщение
В общем покажите что у Вас в getProject и updateProject
Java
1
2
3
4
5
@Override
    @Transactional
    public Project getProject(Integer id) {
        return (Project) openSession().get(Project.class, id);
    }
Java
1
2
3
4
5
@Override
    @Transactional
    public void updateProject(Project project) {
        openSession().update(project);
    }
0
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530
25.05.2016, 19:28
Java
1
projectService.updateProject(projectService.getProject(idProject));
Как я и говорил, Вы тут достаете свежие данные из базы и пытаетесь их сохранить.

И аннотацию @Cascade добавтье
http://www.mkyong.com/hibernat... te-orphan/
1
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
26.05.2016, 18:42  [ТС]
Любопытный, я что-то так и не понял, какой из примеров по ссылке мне подходит..

Добавлено через 19 часов 19 минут
Мне просто, по сути, нужно не удалить юзера из базы, а просто удалить его из списка юзеров в проекте.
0
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530
27.05.2016, 08:34
Так Вас hashCode и equals() в сущностях не переопределены, а Вы их в Set загоняете.
1
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
27.05.2016, 12:24  [ТС]
Цитата Сообщение от Любопытный Посмотреть сообщение
Так Вас hashCode и equals() в сущностях не переопределены, а Вы их в Set загоняете.
То есть в этом проблема? Если да, то как их реализация в сущностях должна выглядеть ?

Добавлено через 23 минуты
Да, это помогло.
0
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530
27.05.2016, 12:40
Цитата Сообщение от asics Посмотреть сообщение
То есть в этом проблема? Если да, то как их реализация в сущностях должна выглядеть ?
Так же как Вы обычно переопределяете их для классов.

Set оперирует результатом этих данных при сравнении элементов на равенство при добавлении/удалении.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.05.2016, 12:40
Помогаю со студенческими работами здесь

Взаимное расположение таблиц и связь manytomany
Итак есть необходимость в админке реализовать возможность добавление многие ко многим. База у меня уже была готовая (Постгре) Модели: ...

удаление информации из таблицы (связь многие ко многим)
несколько таблиц с различной пронумерованной информацией создают связь многие ко многим. номера соединяются в одной таблице по выбору...

ManyToMany в админке
Добрый день! Создал модель, одно из полей - models.ForeignKey('self', blank=True), то есть привязка к записям той же таблицы. И теперь в...

Работа с ManyToMany, Django 1.9
В общем, есть модель Profile, являющаяся расширением стандартной модели User. Эта модель связана отношением ManyToMany с моделью Feed....

Поиск по нескольким тегам в ManyToMany
Есть две таблицы с m2m отношением + таблица связей (book -&gt; book_mark &lt;- mark). Я пытаюсь найти все книги, у которых есть заданный список...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru