Я пытался узнать о различных состояниях объектов в Hibernate. Я попробовал следующее и не смог найти объяснения показанному поведению. Может ли кто-нибудь помочь?
Вот что я пытаюсь сделать: Вставить новую запись в таблицу сотрудников (empId является первичным ключом). В той же транзакции обновите вновь добавленную запись (используя запрос, изменяя empName). Затем, когда я проверяю свойство empName постоянного объекта, оно продолжает показывать старое значение empName. Я ожидал, что, будучи постоянным объектом, он отразит изменения, внесенные в базу данных. Я не мог понять, почему этого не произошло. (В моем конфигурационном файле гибернации все установлено по умолчанию, кроме свойства "hibernate.hbm2ddl.auto", установленного как update) Однако после выполнения обновления, когда я устанавливаю empName постоянного объекта со значением, возвращаемым getEmpName ( который отображается как старое значение empName по sysout), окончательные данные в таблице показывают новое значение empName (то есть то, которое я обновил с помощью hql). Пожалуйста, обратитесь к коду для этого:
Transaction tx = session.getTransaction();
tx.begin();
Employee e1 = new Employee();
e1.setEmpId(1);
e1.setEmpName("Jack");
e1.setEmpAge(25);
session.save(e1);
System.out.println("before: "+e1.getEmpName()); //prints Jack
session.createQuery("update Employee set empName = \'Jack_new\' where id=1").executeUpdate();
System.out.println("after: "+e1.getEmpName()); //prints Jack
e1.setEmpName(e1.getEmpName()); //should update database
tx.commit(); //sets empName value to Jack_new, as seen in table
System.out.println("last: "+e1.getEmpName()); //prints Jack