Сеанс Hibernate не обновляет значение столбца объекта, если столбец уже имеет значение, если он равен null , то нет проблем, сеанс сохраняет новое обновление. Однако, если столбец сущности уже имеет значение, и я обновляю столбец (не по запросу HSQL, а по установщику), сеанс не обновляет значение в базе данных. Например: -
В моем веб-приложении, скажем, есть список пациентов. А у сущности «Пациент» есть 3 столбца -
Имя |Возраст |Доктор
Обратите внимание, что Доктор является внешним ключом в таблице
Теперь предположим, что из списка, который я нажимаю, Назначить *Кнопка 1017 *, которая вызовет API, который назначит только доктора.
Теперь здесь есть уловка, если пациент, скажем, A не имеет доктора (или назначен)а) в БД, и я нажимаю Назначить для настройки нового Доктора, будет вызван API, который установит Доктора для A , который будет работать без проблем. Но теперь, допустим, я хочу обновить назначенного Доктора новым. Поэтому я бы снова нажал на кнопку, чтобы снова вызывать API, только на этот раз новый Доктор не обновляется в БД, вместо этого столбец Доктор остается (NULL) . И если я попытаюсь снова, это устанавливает новое значение Doctor.
Вот код API для обновления / установки электронной почты -
@POST
@Path("/setDoctor/")
@Produces(MediaType.APPLICATION_JSON)
public JSONObject setDoctor(
@FormParam('patientId') int patientId,
@FormParam('DoctorId') int doctorId ){
Session session = HibernateSessionFactory.get().openSession();
session.beginTransaction();
Patient patient = (Patient) session.get(Patient.class, patientId);
patient.setDoctor((Doctor) session.get(Doctor.class,doctorId));
session.save(patient);
session.getTransaction().commit();
session.close();
}
Таким образом, проблема, которая у меня естьудалось сделать вывод, что если столбец «Доктор» равен null и вызывается API, проблем не будет. Но если в столбце «Доктор» есть значение ( Внешний ключ ), и API называется сеансом, он не обновляет новое значение, а устанавливает значение null . I
Примечание: Нет ошибок в коде. Пробовал, окружив его try / catch все еще без ошибок. Я также попытался заменить session.save () на session.saveOrUpdate () , но все равно не работает.