2013-11-28 6 views
1

Я не понимаю, почему только один ряд удаляется приведенным ниже кодом. То же самое происходит с вставкой элементов. Может ли кто-нибудь сказать мне, почему я не могу использовать одну и ту же ссылку на маршрут за & снова?Почему я не могу использовать одну и ту же ссылку на объект в спящем режиме снова и снова?

//Begin transaction 
     Long id=1; 
     Route route = new Route(); 
     RouteDAO routeDAO = new RouteDAOImpl(); 
     route.setRouteId(id); 
     routeDAO.delete(route); 
     route.setRouteId(++id); 
     System.out.println(route.getRouteId()); 
     routeDAO.delete(route); 
     route.setRouteId(++id); 
     routeDAO.delete(route); 
     route.setRouteId(++id); 
     routeDAO.delete(route); 
//Commit Transaction 

Thanks.

+1

Таким образом, в основном, независимо от того, какие изменения вы делаете внутри открытой транзакции на одном и том же объекте, только последний отправляется в БД. Для этого вам нужно создать новые объекты для каждого удаления записи. –

ответ

1

Вы ожидаете, что отдельный ряд/route сфокусирован, когда вы меняете id, но это не так.
Любая мутация на неподвижном объекте вызывает его право на обновление.

Вы всегда используете ту же ссылку route, хотя вы меняете ее, изменяя ее идентификатор, вызывая обновление каждый раз после совершения фиксации.
В действительности, Hibernate делает оптимизацию после фиксации, чтобы избежать этих бесполезных обновлений, поскольку вы указали удаление.

Эти обновления относятся к одной и той же строке, объясняя, почему после фиксации происходит только одно удаление.

Смежные вопросы