Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
43 / 17 / 4
Регистрация: 22.02.2012
Сообщений: 327
MySQL

Не сохраняются два объекта с одним ID в пределах одной сессии

09.04.2016, 10:20. Показов 934. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Есть объект фильм.
У фильма может быть несколько актёров и несколько режиссёров. К тому в оном фильме, один человек может быть и актером и режиссером.

Вот мапинг классов

Film.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Entity(name = "films")
public class Film {
 
    @Id
    @Column(name = "film_id")
    private long id;
 
    private String name;
 
    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(
        name = "film_directors",
        joinColumns = {@JoinColumn(name = "film_id")},
        inverseJoinColumns = {@JoinColumn(name = "person_id")})
    private List<Person> directors;
 
    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(
            name = "film_actors",
            joinColumns = {@JoinColumn(name = "film_id")},
            inverseJoinColumns = {@JoinColumn(name = "person_id")})
    private List<Person> actors;
}
Person.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Entity(name = "persons")
public class Person {
 
    @Id
    @Column(name = "person_id")
    private long id;
 
    private String name;
 
    @ManyToMany(mappedBy = "directors")
    private List<Film> madeFilms;
 
    @ManyToMany(mappedBy = "actors")
    private List<Film> starredInFilms;
}
DAO
Java
1
2
3
4
5
6
7
8
public static <T> long save(T entity){
        Session session = DBService.getInstance().getSession();
        session.getTransaction().begin();
        long id = (long) session.save(entity);
        session.getTransaction().commit();
        session.close();
        return id;
}
Main.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
        Film film = new Film();
        film.setId(100);
        film.setName("Утомленные солнцем");
 
        List<Person> directors = new ArrayList<>();
        directors.add(new Person(20, "Никита Михалков"));
        film.setDirectors(directors);
 
        List<Person> actors = new ArrayList<>();
        actors.add(new Person(20, "Никита Михалков"));
        film.setActors(actors);
 
        DAO.save(film);
При попытке сохранить такой фильм, получаю ошибку: Exception in thread "main" org.hibernate.NonUniqueObjectException: A different object with the same identifier value was already associated with the session. Ругается на двух Михалковых с одним айди.

Вопрос: как это победить?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.04.2016, 10:20
Ответы с готовыми решениями:

Как реализовать два объекта под одним типом?
Проблема состоит в том, что я хочу чтобы можно было приводить тип ссылки родительского класса, к классу сыновей. class Memory_Object ...

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

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

3
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
09.04.2016, 10:49
Ну так не может быть в одной таблицы два одинаковых ида.
0
43 / 17 / 4
Регистрация: 22.02.2012
Сообщений: 327
09.04.2016, 11:01  [ТС]
Это я понимаю, мне не нужно сохранять два объекта. Мне нужно что бы гиберннейт сохранил только один из них, но но в связующие таблицы добавил обе связи.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.04.2016, 13:31
Gabriel.exe, во-первых ненадо разные таблицы для актеров и режисеров. Вам нужна таблица "участники_фильма" и для каждого участника пропишите роль.
Во-вторых если вы хотите добавить одного и того же человека, не надо создавать два разных объекта. Передавайте ссылку.
И конечно же не назначайте айди сами. Этим должна заниматься БД
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.04.2016, 13:31
Помогаю со студенческими работами здесь

Не сохраняются сессии
Прошу помочь доделать функцию Запомнить меня , и закрыть баги если такие есть .... login.php &lt;? if (!isset($myrow) or...

Сессии не сохраняются
Всем привет. У меня есть страница functions.php, которая содержит код для страницы авторизации: class AuthClass { ...

Не сохраняются сессии
Здравствуйте уважаемые форумчане. У меня проблема в следующем - скорее всего у меня не сохраняются сессии (это лишь мое...

Не сохраняются сессии
После ввода логина и пароля происходит авторизация, а после того как я перехожу по ссылке на главную, переменные сессии сбрасываются (в...

Не сохраняются переменные в сессии
Добрый день такая беда, вот есть клиент для windows, с помощью данного клиента отсылаются некие данные на сервер. Первое это IP адрес,...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru