Relacja pomiędzy obiektem trzymający obiekt tego samego typu

0

Witam posiadam pewien problem z ładowaniem obiektów, które posiadają w swoich zmiennych obiekty tego samego typu.

W skrócie mam stworzoną klase User, która posiada zmienną typu String,int no i ten nieszczęsny User.

@Data
public class User {
 
 
    @BsonId
    private final String name;
    private final int age;
    private User mother;
 
    public User(String name, int age){
        this.name = name;
        this.age = age;
    }
}

Dla przykładu stworzyłem 2 userow.

User son = new User("Son", 11);
User mother = new User("Mother", 30);
son.setMother(mother);

Wrzucam ich do bazy w postaci całego obiektu przerobionego na bson document z czego wychodzą mi takie dwa jsony

{
    "_id": "Son",
    "age": 11,
    "mother": {
        "_id": "Mother",
        "age": 30
    }
}
 
{
    "_id": "Mother",
    "age": 30
}

Oczywiście mogę załadować na początku mother wrzucić ten obiekt do mapki i potem przy pobieraniu son sprawdzić czy nie ma mother w mapce jeśli jest ustawić jeśli nie to dodać do mapki i ustawić.W tym rozwiązaniu następuje problem z kolejnością ładowania, gdyż co jeśli uznajmy nie załaduje mother a będę chciał załadować son.

Przy okazji w wypadku występuje duplikacja documentów (mother).

Sorry za zawiłość nie mam pojęcia jak lepiej mógłbym to opisać

0

Bazy nierelacyjne mają swoje zastosowanie, i chyba to co chcesz osiągnąć nie jest jednym z tych zastosowań

0

Tak przy okazji czy takie trzymanie obiektu tego samego typu w zmiennej tego obiektu nie łamie jakiś zasad?

1

@Patryk27: zobacz to:
1590861597.png

czyli nie chodzi o wewnętrzną strukturę, a o powiązanie wartości w ramach jednego rzędu

2

@MarekMareckiPL: Mongo nie obsługuje zależności samo w sobie więc ładowanie danych z obiektami zagnieżdżonymi musisz obsłużyć w aplikacji.
Sposób, który opisaleś ma sens - załadować dane do mapy, a następnie przejść mapę i uzupełnić zależności. Nie da się tego specjalnie rozwiązać mądrzej.
Natomiast jeśli piszesz o "powtórzeniach" - z perspektywy danych nie ma powtórzeń bo Mother jest tak samo obiektem jak Son. Ewentualnie to co możesz zrobić to zostawić w mapie na koniec tylko te obiekty, które mają niepuste mother.

1 użytkowników online, w tym zalogowanych: 0, gości: 1