powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / как пофикстить org.hibernate.NonUniqueObjectException ?
10 сообщений из 35, страница 2 из 2
как пофикстить org.hibernate.NonUniqueObjectException ?
    #38392158
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если это что-то прояснит, то если заменить update на merge, то
авторHTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalStateException: Error occurred while storing entity [com.epam.hhsystem.model.vacancy.Vacancy@6]. An entity copy [com.epam.hhsystem.model.vacancy.Vacancy#6] was already assigned to a different entity [com.epam.hhsystem.model.vacancy.Vacancy@6].
...
Рейтинг: 0 / 0
как пофикстить org.hibernate.NonUniqueObjectException ?
    #38392248
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,
на вторую страницу пошли....
- в апреле у тебя разве не эта тема была?
http://www.sql.ru/forum/1017014/hibernate-otnosheniya-mezhdu-tablicami?hl=create table a_b
- чем пример тут отличается от много ко много там?
...
Рейтинг: 0 / 0
как пофикстить org.hibernate.NonUniqueObjectException ?
    #38392267
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
redwhite90Если это что-то прояснит, то если заменить update на merge, то
авторHTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalStateException: Error occurred while storing entity [com.epam.hhsystem.model.vacancy.Vacancy@6]. An entity copy [com.epam.hhsystem.model.vacancy.Vacancy#6] was already assigned to a different entity [com.epam.hhsystem.model.vacancy.Vacancy@6].
update на merge просто так не меняется: merge возвращает новый объект, и это надо учитывать
Код: java
1.
event = session.merge(event);


Так что лучше показать новый код.
А по проблеме - советую начать по алгоритму, который будет работать наверняка, при любых метаданных (аннотациях)
Код: java
1.
2.
3.
- присоединить хозяина коллекции (в базу пойдет select * from event...)
- присоедить элементы новой коллекции (в базу пойдут select * from vacancy...), заменить коллекцию в хозяине
- сохранить хозяина (в базу пойдет update event... и delete / insert таблицы связи)


Еще лучше, если это делать симметрично, с обеих сторон связи, а hibernate сам разберется, какие запросы делать в базу. Зато полная независимость от метаданных.
Писанины больше, и запросов к базе больше, но работает наверняка. А вот после этого уже играться с аннотациями, глядишь - удастся сократить код на 5 строчек.

По связи Candidate и Event: если речь идет о методе updateEvent, то, как видно из исходного кода, event.candidates не изменяется, поэтому в данном случае все равно, какие там аннотации.
...
Рейтинг: 0 / 0
как пофикстить org.hibernate.NonUniqueObjectException ?
    #38392311
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123redwhite90,
на вторую страницу пошли....
- в апреле у тебя разве не эта тема была?
http://www.sql.ru/forum/1017014/hibernate-otnosheniya-mezhdu-tablicami?hl=create table a_b
- чем пример тут отличается от много ко много там?

там не было этой ошибки)


авторupdate на merge просто так не меняется: merge возвращает новый объект, и это надо учитывать
а я в дао методе так и написал
Код: java
1.
session.merge(event)


вместо
Код: java
1.
session.update(event)
...
Рейтинг: 0 / 0
как пофикстить org.hibernate.NonUniqueObjectException ?
    #38392357
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
redwhite90,
merge не делает update в базу. Этот метод проверяет кеш (сессию), и если записи нет в кеше, то он делает select, и никакого update. Если связь транзитивная, то делается select c join-нами до "противоположного" конца связи.
Кроме того, повторяю:
Код: java
1.
mergedEvent = session.merge(event);


, при этом mergedEvent != event, после мержа старый экземпляр event нужно отправлять в мусор, а работать с mergedEvent
...
Рейтинг: 0 / 0
как пофикстить org.hibernate.NonUniqueObjectException ?
    #38392376
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90там не было этой ошибки)
угу. Скажи ещё датой отличается))
...
Рейтинг: 0 / 0
как пофикстить org.hibernate.NonUniqueObjectException ?
    #38392388
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ivanraredwhite90,
merge не делает update в базу. Этот метод проверяет кеш (сессию), и если записи нет в кеше, то он делает select, и никакого update. Если связь транзитивная, то делается select c join-нами до "противоположного" конца связи.
Кроме того, повторяю:
Код: java
1.
mergedEvent = session.merge(event);


, при этом mergedEvent != event, после мержа старый экземпляр event нужно отправлять в мусор, а работать с mergedEvent
согласен
...
Рейтинг: 0 / 0
как пофикстить org.hibernate.NonUniqueObjectException ?
    #38392624
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в общем вопрос в том, почему всё начинает работать, если поменять хозяина связи Кандидат-Вакансия на Вакансию
...
Рейтинг: 0 / 0
как пофикстить org.hibernate.NonUniqueObjectException ?
    #38392909
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
redwhite90в общем вопрос в том, почему всё начинает работать, если поменять хозяина связи Кандидат-Вакансия на Вакансиюсложно ответить, не видя всего кода. 3 связи по кругу, с каскадными обновлениями - уже ситуация не для слабых духом, ведь транзитивные связи "цепляют" друг друга, в том числе могут и "закольцеваться". А тут еще особенности работы хибернейтовских коллекций много-ко-многим. Вслепую разобрать это невозможно
...
Рейтинг: 0 / 0
как пофикстить org.hibernate.NonUniqueObjectException ?
    #38392942
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,
- 3 таблицы - Кандидаты, Вакансии, СвязкаК-В
- Список вакансий - справочник. Значит каскад от Кандидатов. При удалении кандидата - очистка К-В.
Т.е. один каскад Кандидаты -> К-В

- добейся чтобы работало без отсоединения объектов от сессии. А потом уже с ней.
Удачи.
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / как пофикстить org.hibernate.NonUniqueObjectException ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]