Лучшая практика при сохранении объекта JSON с использованием Hibernate - PullRequest
0 голосов
/ 16 октября 2019

У меня есть вариант использования, такой как:

Я хочу знать, возможно ли преобразовать JSON, полученный непосредственно, в объект JPA, который затем можно сохранить, передав его методу репозитория

Например, следующий JSON:

{
    "studentName": "Tom",
    "subjects": [
        {
            "subjectName": "Maths",
            "marks": 25
        },
        {
            "subjectName": "Science",
            "marks": 25
        }
    ]
}

В описанной выше ситуации Студент и Субъект - это сущности, имеющие отношения между многими ко многим ... Примерно следующие сущности JPA могут бытьсоздан для этой ситуации:

public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private int studentId;

    private String studentName;

    @OneToMany(mappedBy = "student", cascade = CascadeType.ALL)
    private Set<StudentSubject> studentSubject = new HashSet<>();
}

public class Subject {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private int subjectId;

    private String subjectName;

    @OneToMany(mappedBy = "subject")
    private List<StudentSubjectMark> studentSubjectMarks = new ArrayList<>();
}

public class StudentSubjectMark implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    int studentSubjectMarkId;

    @ManyToOne
    @JoinColumn
    Student student;

    @ManyToOne
    @JoinColumn
    Subject subject;

    private int  marks;

    @Override
    public boolean equals(Object o) {
        return false; // template code
    }

    @Override
    public int hashCode() {
        return 1; // template code
    }
}

Каков наилучший способ обработки этого JSON для вывода объекта JPA ученика?

Должен ли я зацикливать обработку каждого поля в исходном JSON отдельно для построенияfinal Entity или есть библиотека, которую я мог бы использовать?

Помните, что формат JSON и классы могут быть изменены при необходимости.

Спасибо

...