![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Billik |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 1.6.2010 Репутация: нет Всего: нет |
Всем привет,
У меня вопрос. Создал 2 класса, которые автоматически генерят 2 Таблицы. Authority имеет foreign key на username. С помощью кода, который я приведу ниже у меня все работает (создание, удаление и редактирование), кроме редактирования поля username. Кидается ошибка:
Ошибка понятна ибо у foreign key нет ON UPDATE CASCADE. Если я руками добаляю это в базе, тогда username редактировать можно. Вопрос в следующем: Как с помощью JPA добавить ON UPDATE CASCADE для foreign key? Пожалуйста, приведите пример. Ибо перепробовал @Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE), @Cascade(org.hibernate.annotations.CascadeType.MERGE) и @Cascade(org.hibernate.annotations.CascadeType.PERSIST) не палит или я что-то не так делаю. Вот мои два класса.
Огромное спасибо |
||||||
|
|||||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Я так понимаю, что Authority это подчиненная сущность и отдельно от User она не существует, так?
Если да, то поставь у Authority
у User
добавь методы addAuthority() и removeAuthority() которые будут корректно проставлять взаимные ссылки в обоих классах. И вызывай persist() для обоих сущностей. P.S. Если проблема останется, то включи логгирование SQL запросов у Hibernate (я так понимаю, ты именно его используешь). -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| XoJIoD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 23.4.2008 Репутация: нет Всего: нет |
Billik, а не пробавал ли ты перенести Foreign Key с поля username на поле id для класса User? и еще наверно надо в этих классах переопределить equals и hashCode. А лудше написат Layer Supertype с этими методами.
|
|||
|
||||
| Billik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 1.6.2010 Репутация: нет Всего: нет |
XoJIoD,
Нельзя. Условие такое. LSD, Увы такого orphanRemoval = true нет в аннотации @OneToMany. Пытался добавить @OnDelete(action = OnDeleteAction.CASCADE), но это тоже не помогло. Нужно просто добавить ON UPDATE CASCADE в foreign key, только как это сделать средствами JPA я не знаю :( Спасибо за помощь. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Есть, но в версии 2.0.
Нет не нужно. Если какие-то изменения в базе будут проводится, минуя Hibernate (каскады, тригеры и т.п.). То Hibernate о них не узнает и могут быть проблемы с закешированными данными. А вообще включи логгирование SQL и параметров. Что он пытается прописать, что вызывается такая странная ошибка. Судя по ошибке, он пытается записать в username значение, которого нет в родительской таблице. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Billik |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 1.6.2010 Репутация: нет Всего: нет |
LSD,
Сначала в логах пишется
Потом валится ошибка. А вот если прописать ON UPDATE CASCADE в foreign key, тогда все сохраняется хорошо. И порядок сохранения такой:
|
||||
|
|||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
А какие параметры для этих запросов? (org.hibernate.type на уровне TRACE).
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |