Spring Hibernate — поддерживает ли он вложенные объекты?

Недавно я задал этот вопрос: Spring Mongodb - Вставить вложенный документ?

И обнаружил, что Spring-Data-MongoDB не поддерживает такое поведение — так что теперь мне нужна работающая альтернатива.

Теперь, чтобы вы не смотрели код на другой странице, я собираюсь вставить его сюда из другого вопроса... Вот мои два POJO:

@Document
public class PersonWrapper {

    @Id
    private ObjectId _Id;

    @DBRef
    private Person leader;

    @DBRef
    List<Person> delegates;

    // Getters and setters removed for brevity.
}

public class Person
{
    @Id
    private ObjectId _Id;

    private String name;

    // Getters and setters removed for brevity.
}

Теперь то, что я хочу сделать здесь, это отправить объект JSON в моем запросе POST следующим образом:

{
    "personWrapper":
    {
        "_Id":"<ID HERE (MIGHT WANT SQL TO GENERATE THIS DURING CREATE>",
        "leader":{
            "_Id":"<ID HERE (MIGHT WANT SQL TO GENERATE THIS DURING CREATE>",
            "name":"Leader McLeaderFace"
        },
        delegates:[{...},{...},{...}]
    }
}

На этом этапе я хотел бы, чтобы сторона SQL создала необходимые отдельные записи, а затем вставила запись PersonWrapper со всеми правильными внешними ключами для нужных записей наиболее эффективным способом.

Честно говоря, если кто-то из вас думает, что я ошибаюсь в подходе Spring-Data-MongoDB к этому, мне все равно будет интересен ответ, потому что это избавит меня от необходимости переноса настроек моей базы данных. Так что я по-прежнему буду отмечать здесь сообщество spring-data-mongodb.


person IWishIWasABarista    schedule 25.04.2017    source источник


Ответы (1)


Если я правильно понимаю, вы хотите каскадно сохранять свои объекты?

пример: вы сохраняете PersonWrapper с некоторым Person в свойстве делегатов, а данные Spring сохранят PersonneWrapper в коллекции, а также сохранят список Person в другой коллекции.

Это можно сделать с помощью Spring DATA JPA, если вы аннотируете свой POJO аннотацией JPA @OneToMany и настроите каскадное свойство этой аннотации. см. этот пост

Однако функция каскадирования недоступна для Spring DATA mongoDB. см. документация. Сначала вы должны сохранить список Person, а затем сохранить PersonWrapper.

person Maxime Leprince    schedule 25.04.2017
comment
Хорошо, я был бы готов сохранить список Person, а затем сохранить оболочку, но как это сделать наиболее эффективно? - person IWishIWasABarista; 26.04.2017