Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Удаление объекта из базы Spring (Hibernate) / 17 сообщений из 17, страница 1 из 1
01.06.2012, 21:54:31
    #37822178
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта из базы Spring (Hibernate)
Есть объект у него много связей с другими вида OneToMany, как удалить его и соответственно связанные с ним объекты используя его Id. Каскады выставлены.
Сейчас делаю вот так:

Код: java
1.
2.
3.
MyObject myObject= new MyObject();
myObject.setId(id);
hibernateTemplate.delete(myObject);



Во-первых подозреваю что это не правильно, во-вторых выскакивает ошибка, что сначала надо удалить связанные с этим объектом записи из других таблиц.
...
Рейтинг: 0 / 0
01.06.2012, 21:59:35
    #37822182
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта из базы Spring (Hibernate)
в Базе почему-то не были выставлен каскад на удаление, разве это не работа Хибернайте схему Базы обновлять?
И все таки как правильно удалить обьект по его Id?
...
Рейтинг: 0 / 0
02.06.2012, 00:03:04
    #37822258
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта из базы Spring (Hibernate)
Опять экстрасенсов ищем? Entity свой покажи. Есть там связи или нет.
Устанавливать вручную id - очень, очень, очень плохая практика.
Судя по ошибке, у тебя или каскады неправильно настроены у свойства, или orphanRemoval не установлен.
Автоматически хибер не удаляет дерево объектов.
...
Рейтинг: 0 / 0
02.06.2012, 00:37:58
    #37822289
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта из базы Spring (Hibernate)
IDVsbruckОпять экстрасенсов ищем? Entity свой покажи. Есть там связи или нет.
Устанавливать вручную id - очень, очень, очень плохая практика.
Судя по ошибке, у тебя или каскады неправильно настроены у свойства, или orphanRemoval не установлен.
Автоматически хибер не удаляет дерево объектов.
Этот вопрос я уже решил)
Я спрашиваю как удалить объект из базы зная его id, если у него нет связей никаких, используя Spring (hibernateTemplate))
...
Рейтинг: 0 / 0
02.06.2012, 00:44:09
    #37822299
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта из базы Spring (Hibernate)
Код: java
1.
hibernateTemplate.delete(hibernateTemplate.get(MyObject.ckass, id));
...
Рейтинг: 0 / 0
02.06.2012, 00:45:36
    #37822301
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта из базы Spring (Hibernate)
*class
...
Рейтинг: 0 / 0
02.06.2012, 02:50:39
    #37822356
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта из базы Spring (Hibernate)
IDVsbruck
Код: java
1.
hibernateTemplate.delete(hibernateTemplate.get(MyObject.ckass, id));


Странно однако)
...
Рейтинг: 0 / 0
02.06.2012, 05:18:58
    #37822363
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта из базы Spring (Hibernate)
Почему? Ты хотел бы, что был метод .delete(Long id)? А как тогда быть тем, у кого ид-поле в виде стринга, интеджера? А если составные ключи? - Хиберу на все случаи жизни делать методы? Они стандарный забацали, а ты уж будь добр, разруливай дальше ...
...
Рейтинг: 0 / 0
02.06.2012, 09:51:03
    #37822401
Senya_L
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта из базы Spring (Hibernate)
rdmIDVsbruck
Код: java
1.
hibernateTemplate.delete(hibernateTemplate.get(MyObject.ckass, id));


Странно однако)Если не хочется делать лишнее считывание, то воспользуйтесь HQL напрямую черезе Session-объект, в обход спрингового темплейта:
Код: java
1.
getHibernateTemplate().getSession().createQuery("delete from MyEntity me where me.id = :id").setLong(0, id).executeUpdate();


Или (не в обход темплейта) через HibernateTemplate.bulkUpdate(String queryString, Object value). Второй способ предпочтительнее, поскольку не придется обрабатывать транзакции самому.
...
Рейтинг: 0 / 0
02.06.2012, 10:49:31
    #37822418
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта из базы Spring (Hibernate)
IDVsbruckПочему? Ты хотел бы, что был метод .delete(Long id)? А как тогда быть тем, у кого ид-поле в виде стринга, интеджера? А если составные ключи? - Хиберу на все случаи жизни делать методы? Они стандарный забацали, а ты уж будь добр, разруливай дальше ...
Разве get на загрузит обьект, какие-то поля там(я не про Lazy)?
Т.е. для того чтобы удалить, мы должны его загрузить) Ну разве не странно? )
...
Рейтинг: 0 / 0
02.06.2012, 10:51:41
    #37822420
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта из базы Spring (Hibernate)
Senya_Lrdmпропущено...

Странно однако)Если не хочется делать лишнее считывание, то воспользуйтесь HQL напрямую черезе Session-объект, в обход спрингового темплейта:
Код: java
1.
getHibernateTemplate().getSession().createQuery("delete from MyEntity me where me.id = :id").setLong(0, id).executeUpdate();


Или (не в обход темплейта) через HibernateTemplate.bulkUpdate(String queryString, Object value). Второй способ предпочтительнее, поскольку не придется обрабатывать транзакции самому.
Мне казалось что bulkUpdate был добавлен для массового обновления данных в таблице.
Все эти способы какие-то квадратные чтоли.
...
Рейтинг: 0 / 0
02.06.2012, 11:47:18
    #37822444
vas0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта из базы Spring (Hibernate)
rdmIDVsbruckПочему? Ты хотел бы, что был метод .delete(Long id)? А как тогда быть тем, у кого ид-поле в виде стринга, интеджера? А если составные ключи? - Хиберу на все случаи жизни делать методы? Они стандарный забацали, а ты уж будь добр, разруливай дальше ...
Разве get на загрузит обьект, какие-то поля там(я не про Lazy)?
Т.е. для того чтобы удалить, мы должны его загрузить) Ну разве не странно? )session.get - загружает объект
session.load - создает прокси с выставленным id-шником

Попробуй вариант session.delete(session.load(MyObject.class, id)) и посмотри будет ли происходить "ненужное" вычитывание.
...
Рейтинг: 0 / 0
02.06.2012, 13:32:02
    #37822497
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта из базы Spring (Hibernate)
vas0rdmпропущено...

Разве get на загрузит обьект, какие-то поля там(я не про Lazy)?
Т.е. для того чтобы удалить, мы должны его загрузить) Ну разве не странно? )session.get - загружает объект
session.load - создает прокси с выставленным id-шником

Попробуй вариант session.delete(session.load(MyObject.class, id)) и посмотри будет ли происходить "ненужное" вычитывание.
Все загружается)
...
Рейтинг: 0 / 0
02.06.2012, 13:39:55
    #37822500
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта из базы Spring (Hibernate)
Я только делал load у hibernateTemplate)
Вопрос то как мне кажется абсолютно банальный) Как удалить объект не загружая его по long id)
Неужто нет стандартного подхода к этому используя hibernateTemplate? ))
...
Рейтинг: 0 / 0
02.06.2012, 13:44:33
    #37822503
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта из базы Spring (Hibernate)
hibernateTemplate.bulkUpdate(String queryString, Object value) такой вариант работает)
Но разве так правильно? )
...
Рейтинг: 0 / 0
02.06.2012, 15:38:17
    #37822605
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта из базы Spring (Hibernate)
Если посмотреть цепочку передачи объекта и реализацию механизма удаления сущности/объекта, то а) ясно будет, что при появлении метода delete(id) от будет делать все равно delete(get(class, id)); б) спринговский hibernateTemplate ничего совершенно сам не делает, только лишь передает параметры сессии хибернейта, а у хибера тоже нет такого метода, тоже либо только с объектом, либо еще с блокировкой (LockMode).

Использование HQL (или другой способ) вряд ли оптимизирует процесс удаления. По скорости наверняка проиграет, так как конечный пункт удаления для любой цепочки удаления - это реализация DeleteEventListener и дальнейшие действия вплоть до драйвера - она одинакова, но затраты на парсинг текстового запроса, составление реального запроса к базе и т.д. - он более затратный.
...
Рейтинг: 0 / 0
02.06.2012, 18:35:53
    #37822743
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление объекта из базы Spring (Hibernate)
IDVsbruckЕсли посмотреть цепочку передачи объекта и реализацию механизма удаления сущности/объекта, то а) ясно будет, что при появлении метода delete(id) от будет делать все равно delete(get(class, id)); б) спринговский hibernateTemplate ничего совершенно сам не делает, только лишь передает параметры сессии хибернейта, а у хибера тоже нет такого метода, тоже либо только с объектом, либо еще с блокировкой (LockMode).

Использование HQL (или другой способ) вряд ли оптимизирует процесс удаления. По скорости наверняка проиграет, так как конечный пункт удаления для любой цепочки удаления - это реализация DeleteEventListener и дальнейшие действия вплоть до драйвера - она одинакова, но затраты на парсинг текстового запроса, составление реального запроса к базе и т.д. - он более затратный.
Извините, я просто не понял смысл. Т.е. правильно сначала загрузить объект и потому удалить его стандартным методом delete?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Удаление объекта из базы Spring (Hibernate) / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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