![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| carn |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 18.4.2012 Репутация: нет Всего: нет |
Всем привет!
У меня есть таблица Teacher; Хочу удалить строку; Добавлено через 3 минуты и 45 секунд @Transactional public void deleteTeacher(Teacher teacher) { tmpl.delete(teacher); tmpl.flush(); } Вызываю этот метод. Вылетает ошибка: Could not execute JDBC batch update; SQL [delete from Teacher where idTeacher=?]; constraint [null]; Причем idTeacher в передаваемом объекте указан! Помогите, пожалуйста! :'( |
|||
|
||||
| danilych |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 2.2.2011 Репутация: нет Всего: 3 |
Судя по ошибке constraint [null]; - ваш idTeacher является внешним ключом в другой таблице. Попробуйте проверить это выполнив запрос в базе:
delete from <таблица учителей> where <имя id в таблице> = ? если не удалится, то 100% проблема во внешнем ключе. |
|||
|
||||
| carn |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 18.4.2012 Репутация: нет Всего: нет |
Спасибо за ответ! Да, действительно, это внешний ключ в другой таблице. Вообще мне надо чтоб и из другой таблице все строки с этим айди поудалялись.
В другой сущности у меня следующее @OneToOne(cascade = CascadeType.ALL) private Teacher teacher; по идее должно произойти каскадное удаление... Не понимаю, почему не работает. Это сообщение отредактировал(а) carn - 21.4.2012, 11:18 |
|||
|
||||
| danilych |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 2.2.2011 Репутация: нет Всего: 3 |
мой код, который работает
в ArticleText никаких @OneToOne нет, когда удаляю Article , то удаляется и ArticleText Добавлено @ 11:30 вообще могу посоветовать видеоуроки по технологиям java на youtube, по хибернейту вообще отличные, всегда у меня под рукой http://www.youtube.com/user/koushks Это сообщение отредактировал(а) danilych - 21.4.2012, 11:30 |
|||
|
||||
| carn |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 18.4.2012 Репутация: нет Всего: нет |
Огромное спасибо!
Попробую так. Если что, отпишусь |
|||
|
||||
| carn |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 18.4.2012 Репутация: нет Всего: нет |
Сделал так как Вы посоветовали.
public class Teacher implements Serializable { ... @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) private Authorizations auth; ... } Теперь ошибки нет, и удаление препода происходит. Но соответсвующий аккаунт всё равно не удаляется, блин. Загружаю в сообщение скриншот sql, можете посмотреть, если желаете. Присоединённый файл ( Кол-во скачиваний: 4 )
sql.jpg 232,32 Kb |
|||
|
||||
| danilych |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 2.2.2011 Репутация: нет Всего: 3 |
как вы БД формировали? Вручную или с помощью hibernate? Если с помощью hibernate, то удалите схему и создайте заново, hibernate не умеет обновлять схему, он только добавляет новое.
и добавьте @JoinColumn(name="FK_TEXT_ID") - это поле добавится в вашей родительской таблице и по значению в этом поле будут удаляться ваш аккаунт Это сообщение отредактировал(а) danilych - 21.4.2012, 12:37 |
|||
|
||||
| carn |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 18.4.2012 Репутация: нет Всего: нет |
БД генерировал с помощью hibernate.
После внесения изменений в структуру БД, я меняю в hibernate.cfg <property name="hbm2ddl.auto">update</property> на <property name="hbm2ddl.auto">create</property> Это пересоздаёт базу. Далее возвращаю <property name="hbm2ddl.auto">update</property> Вот... Добавлено через 6 минут и 4 секунды хм.. насчёт @JoinColumn(name="FK_TEXT_ID") не очень понял. У меня в родительской таблице есть поле auth_idAuthorization. |
|||
|
||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 3 Всего: 48 |
Попробуйте добавить аннотацию
|
|||
|
||||
| carn |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 18.4.2012 Репутация: нет Всего: нет |
Так тоже не работает
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @OnDelete(action = OnDeleteAction.CASCADE) private Authorizations auth; Жесть! Всё равно, я Вам очень благодарен за помощь! Буду дальше пытаться, это часть моего диплома |
|||
|
||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 3 Всего: 48 |
Ну сделайте удаление двумя запросами вместо одного
|
|||
|
||||
| carn |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 18.4.2012 Репутация: нет Всего: нет |
Если не получиться с каскадным удалением, то придется так..
|
|||
|
||||
| Старовъръ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.5.2008 Репутация: 1 Всего: 10 |
Ты же удаляешь не основной объект, в таком случае откуда ему знать, что нужно каскадно удалять внешний? В этом куске ты говоришь что при удалении главного объекта, нужно удалять и дочерний, а ты делаешь наоборот. -------------------- |
|||
|
||||
| carn |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 18.4.2012 Репутация: нет Всего: нет |
Да я просто уже переделал два раза )
Раньше у меня связывающее поле было в таблице authorizations, а стало в teacher. @OneToOne(cascade = CascadeType.ALL) private Teacher teacher; этого у меня теперь нет ) Я сделал удаление двумя запросами. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |