Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Mysql + hibernate, Ошибка при удалении строки 
:(
    Опции темы
carn
  Дата 21.4.2012, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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  в передаваемом объекте указан!
Помогите, пожалуйста! :'(
PM MAIL   Вверх
danilych
Дата 21.4.2012, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 2.2.2011

Репутация: нет
Всего: 3



Судя по ошибке constraint [null]; - ваш idTeacher является внешним ключом в другой таблице. Попробуйте проверить это выполнив запрос в базе:
delete from <таблица учителей> where <имя id в таблице> = ?

если не удалится, то 100% проблема во внешнем ключе.
PM MAIL   Вверх
carn
Дата 21.4.2012, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 18.4.2012

Репутация: нет
Всего: нет



Спасибо за ответ! Да, действительно, это внешний ключ в другой таблице. Вообще мне надо чтоб и из другой таблице все строки с этим айди поудалялись.
В другой сущности у меня следующее
    @OneToOne(cascade = CascadeType.ALL)
    private Teacher teacher;
по идее должно произойти каскадное удаление...
Не понимаю, почему не работает.


Это сообщение отредактировал(а) carn - 21.4.2012, 11:18
PM MAIL   Вверх
danilych
Дата 21.4.2012, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 2.2.2011

Репутация: нет
Всего: 3



мой код, который работает 
Код

class Article ....

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name="FK_TEXT_ID")
    public ArticleText getText() {
        return text;
    }


в ArticleText  никаких @OneToOne нет, когда удаляю Article , то удаляется и ArticleText

Добавлено @ 11:30
вообще могу посоветовать видеоуроки по технологиям java на youtube, по хибернейту вообще отличные, всегда у меня под рукой http://www.youtube.com/user/koushks

Это сообщение отредактировал(а) danilych - 21.4.2012, 11:30
PM MAIL   Вверх
carn
  Дата 21.4.2012, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 18.4.2012

Репутация: нет
Всего: нет



Огромное спасибо!
Попробую так. 
Если что, отпишусь smile 
PM MAIL   Вверх
carn
  Дата 21.4.2012, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
danilych
Дата 21.4.2012, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 2.2.2011

Репутация: нет
Всего: 3



как вы БД формировали? Вручную или с помощью hibernate? Если с помощью hibernate, то удалите схему и создайте заново, hibernate не умеет обновлять схему, он только добавляет новое.

и добавьте 
@JoinColumn(name="FK_TEXT_ID") - это поле добавится в вашей родительской таблице и по значению в этом поле будут удаляться ваш аккаунт

Это сообщение отредактировал(а) danilych - 21.4.2012, 12:37
PM MAIL   Вверх
carn
  Дата 21.4.2012, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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. 
PM MAIL   Вверх
Stolzen
Дата 21.4.2012, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 3
Всего: 48



Попробуйте добавить аннотацию
Код

@OnDelete(action = OnDeleteAction.CASCADE)



--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
carn
  Дата 21.4.2012, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 18.4.2012

Репутация: нет
Всего: нет



Так тоже не работает smile 
 
    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @OnDelete(action = OnDeleteAction.CASCADE)
    private Authorizations auth;

Жесть!
Всё равно, я Вам очень благодарен за помощь!
Буду дальше пытаться, это часть моего диплома  smile 
PM MAIL   Вверх
Stolzen
Дата 21.4.2012, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 3
Всего: 48



Ну сделайте удаление двумя запросами вместо одного


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
carn
Дата 21.4.2012, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 18.4.2012

Репутация: нет
Всего: нет



Если не получиться с каскадным удалением, то придется так..

PM MAIL   Вверх
Старовъръ
Дата 21.4.2012, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.5.2008

Репутация: 1
Всего: 10



Цитата
В другой сущности у меня следующее
    @OneToOne(cascade = CascadeType.ALL)
    private Teacher teacher;

Ты же удаляешь не основной объект, в таком случае откуда ему знать, что нужно каскадно удалять внешний? В этом куске ты говоришь что при удалении главного объекта, нужно удалять и дочерний, а ты делаешь наоборот.
PM MAIL WWW   Вверх
carn
Дата 22.4.2012, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 18.4.2012

Репутация: нет
Всего: нет



Да я просто уже переделал два раза )
Раньше  у меня связывающее поле было в таблице authorizations, а стало в teacher. 

    @OneToOne(cascade = CascadeType.ALL)
    private Teacher teacher;

этого у меня теперь нет )
Я сделал удаление двумя запросами. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0505 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.