powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Удаление объекта из базы Spring (Hibernate)
17 сообщений из 17, страница 1 из 1
Удаление объекта из базы Spring (Hibernate)
    #37822178
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть объект у него много связей с другими вида OneToMany, как удалить его и соответственно связанные с ним объекты используя его Id. Каскады выставлены.
Сейчас делаю вот так:

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



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


Странно однако)
...
Рейтинг: 0 / 0
Удаление объекта из базы Spring (Hibernate)
    #37822363
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему? Ты хотел бы, что был метод .delete(Long id)? А как тогда быть тем, у кого ид-поле в виде стринга, интеджера? А если составные ключи? - Хиберу на все случаи жизни делать методы? Они стандарный забацали, а ты уж будь добр, разруливай дальше ...
...
Рейтинг: 0 / 0
Удаление объекта из базы Spring (Hibernate)
    #37822401
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Удаление объекта из базы Spring (Hibernate)
    #37822418
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckПочему? Ты хотел бы, что был метод .delete(Long id)? А как тогда быть тем, у кого ид-поле в виде стринга, интеджера? А если составные ключи? - Хиберу на все случаи жизни делать методы? Они стандарный забацали, а ты уж будь добр, разруливай дальше ...
Разве get на загрузит обьект, какие-то поля там(я не про Lazy)?
Т.е. для того чтобы удалить, мы должны его загрузить) Ну разве не странно? )
...
Рейтинг: 0 / 0
Удаление объекта из базы Spring (Hibernate)
    #37822420
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Удаление объекта из базы Spring (Hibernate)
    #37822444
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmIDVsbruckПочему? Ты хотел бы, что был метод .delete(Long id)? А как тогда быть тем, у кого ид-поле в виде стринга, интеджера? А если составные ключи? - Хиберу на все случаи жизни делать методы? Они стандарный забацали, а ты уж будь добр, разруливай дальше ...
Разве get на загрузит обьект, какие-то поля там(я не про Lazy)?
Т.е. для того чтобы удалить, мы должны его загрузить) Ну разве не странно? )session.get - загружает объект
session.load - создает прокси с выставленным id-шником

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

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

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

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

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


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