Как запретить Hibernate обновлять значения столбцов как нулевые в веб-запросах PUT?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как запретить Hibernate обновлять значения столбцов как нулевые в веб-запросах PUT?

Сообщение Anonymous »

Я реализую операции CRUD в своем приложении весенней загрузки и застрял на реализации HTTP-запросов PUT для обновления только определенных значений моего объекта. В частности, моя проблема заключается в том, что мой метод обновления обновляет все поля в моей сущности независимо от того, являются ли эти значения нулевыми. Я просмотрел бесчисленное количество проектов на GitHub, которые делают то же самое, но не смог понять, какое решение является лучшим, учитывая также, что мои сущности имеют сложный тип, поскольку они содержат отношения типа @OneToMany/@OneToOne.Вот мой класс сущности:

Код: Выделить всё

@Entity
@Table(name = "doctor")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id", scope = Long.class)
@DynamicUpdate(value = true)
public class DoctorProfile implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(length = 10)
private String gender;

@NotNull
@Column(unique = true, name = "phone_number", length = 15)
private String phoneNumber;

@Column(name = "specialization", length = 15)
private String specialization;

@Column(name = "avatar", length = 200)
private String avatar;

@OneToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "doctor_id", nullable = false)
private Doctor doctor;

@OneToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "clinic_id", nullable = false)
@JsonBackReference
private Clinic clinic;

//Getter-Setters omitted
}
Вот мой класс обслуживания:

Код: Выделить всё

  public ResponseEntity updateDoctorProfile(DoctorProfile newInfo, long id){

DoctorProfile dc = doctorProfileRepository.findById(id).orElseThrow(
() -> new DoctorNotFoundException(id));

dc.setGender(newInfo.getGender());
dc.setPhoneNumber(newInfo.getPhoneNumber());
dc.setSpecialization(newInfo.getSpecialization());
dc.setClinic(newInfo.getClinic());
dc.setAvatar(newInfo.getAvatar());

final DoctorProfile updatedDoctor = doctorProfileRepository.save(dc);
return ResponseEntity.ok(updatedDoctor);
}
[

Код: Выделить всё

@RestController
Класс опущен]
Как видите, я пытался использовать аннотацию @DynamicUpdate, которая должна оставить неизменными все поля в @RequestBody, которые null, но у меня это не работает.
Я также думал о реализации логики, которая проверяет, являются ли поля нулевыми или нет в @RequestBody, и в конечном итоге заменяет их копирование значений из объекта, который я пытаюсь обновить. Но у этого решения есть две проблемы:
• Код выглядит грязным;
• Я не могу обновить значения, на которые ссылаются такие отношения, как @OneToOne через @RequestBody, например поля «Клиника» или «Доктор» в мой @Entity, поскольку я не передаю весь класс, а только идентификатор, и хотя этот подход работает в MySQL, он не работает в Spring JPA (и я все еще пытаюсь выяснить решение).
Я прочитал здесь несколько ответов о переполнении стека, и некоторые предложили создать методы, которые обновляют только одно поле за раз, поскольку именно так предполагается запрос HTTP.PUT. работать. Но действительно ли это хороший подход? Что делать, если у меня 100 200 или даже больше столбцов? Мне кажется это непрактичным и однообразным.

Подробнее здесь: https://stackoverflow.com/questions/660 ... web-reques
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему короткие нулевые значения преобразуются в нулевые значения int для сравнения с нулевым?
    Anonymous » » в форуме C#
    0 Ответы
    37 Просмотры
    Последнее сообщение Anonymous
  • Ошибка метода PUT Laravel: метод PUT не поддерживается для маршрута
    Anonymous » » в форуме Php
    0 Ответы
    142 Просмотры
    Последнее сообщение Anonymous
  • Запрос PUT работает с Postman, но не с axios.put для серверной части Spring Security oAuth Resource Server.
    Anonymous » » в форуме JAVA
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous
  • В чем разница между ThreadContext.put() и MDC.Put()?
    Anonymous » » в форуме JAVA
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • В чем разница между ThreadContext.put() и MDC.Put()?
    Anonymous » » в форуме JAVA
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»