Удаляет ли постоянный объект значение NULL в Hibernate? - PullRequest
0 голосов
/ 06 ноября 2011

Рассмотрим пример: (User - это класс с двумя полями: сгенерированный идентификатор и имя пользователя)

User user = new User();
user.setUserName("username");

SessionFactory sessionfactory = new Configuration().configure().buildSessionFactory();
Session session = sessionfactory.openSession();

session.beginTransaction();
session.save(user);
user = null; // Does this deletes the object?
session.getTransaction().commit();

session.close();

Поскольку user является постоянным объектом, почему установка null не удаляет объект из БД?

1 Ответ

5 голосов
/ 06 ноября 2011

Нет, это не так. Установка локальной переменной на null ничего не значит вне метода. Hibernate не может знать, что вы аннулировали локальную переменную (даже если это поле не управляется hibernate, для hibernate все равно будет невозможно обнаружить изменения).

Причина в том, что переменные и поля - это просто ссылки на объекты, а не сами объекты. Поэтому, когда вы обнуляете ссылку, это не означает, что объект перестает существовать. В этом случае он все еще существует в спящем режиме. (Как отметил JB Nizet, если объект, владеющий полем, управляется hibernate, hibernate может обнаружить изменение и удалить объект, но это верно только для объектов, управляемых hibernate: присоединенные объекты)

Вам нужно позвонить session.delete(user)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...