rstJkee
@rstJkee

CRUD spring+hibernate: передача json и обработка на сервере?

Есть 2 модели
Users
@Entity
public class Users {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Column(nullable = false)
    private String name;

    @Column(nullable = true)
    private int yearOld;

    @JsonIgnore
    @Column(nullable = false)
    private String password;

    @OneToMany(targetEntity = Pet.class, cascade = CascadeType.ALL, mappedBy = "owner")
    private List<Pet> pets;
    // сеттеры, геттеры, конструкторы
}

Таблица Pet
@Entity
@DynamicUpdate
public class Pet {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column(nullable = true)
    private short yearOld;

    @ManyToOne
    @JoinColumn
    private Users owner;
    // геттеры, сеттеры, конструкторы
}

Вопрос: как правильно передать json для джавы, чтобы можно было сделать crud для one-to-many модели (в особенности update и create интересует)? Также интересно, как грамотно это обработать на стороне джавы.

То есть меня интересует 2 позиции:
1. Оптимальность, чтобы не надо было передавать лишних полей, если они не заносятся в таблицу или автогенерируются
2. В JSON в поле one-to-many (например при создании юзера у него будут животные) чтобы передавался только массив idшников животных, а не полностью вся информация о них (частично пересекается с первым пунктом - оптимальность)

Если что-то из этого невозможно соблюсти, то можете прям так сказать
  • Вопрос задан
  • 171 просмотр
Решения вопроса 1
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Добрый день.
По-первых, для реализации вашей задачи вам необходимо обратить внимание на паттерно DTO (data to object).
Также, если у вас приложение на Spring, то можете подключить мапперы для удобства маппинга (конвертации) dto -> entity (и наоборот). Можете использовать такие либы, как modelMapper, MapStruct.
Если не хотите использовать либу, то имплементируйте интерфейс Converter<S,T>

Оптимальность, чтобы не надо было передавать лишних полей, если они не заносятся в таблицу или автогенерируются

Вы можете на клиентской стороне средствами js проверить поля объекта на null и в случае оного просто не передавать это поле. Ну или же можно передать это поле и проверить на null & empty уже на серверной стороне.

В JSON в поле one-to-many (например при создании юзера у него будут животные) чтобы передавался только массив idшников животных, а не полностью вся информация о них (частично пересекается с первым пунктом - оптимальность)

Чтобы передать id животного/ных из фронта необходимо, чтобы они были в БД. Если животные добавляются раньше пользователя, то достаточно при получении dto для user (в утильном классе Converter) найти животных по переданным id и назанчить этих животных юзеру через setPets()или метод addPet()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы