REST: domena będąca podzbiorem drugiej

Odpowiedz Nowy wątek
2018-12-27 09:03
Nieposkromiony Ogórek
0

2 klasy: Location i Address. Location zawiera Address i dodatkowe pola.
Przy tworzeniu adresu, a więc (insertowaniu do tabeli ADDRESS), tworzyć ma się też lokalizacja (a więc ma się insertować też do tabeli LOCATION).

Jak to zrobić elegancko korzystając z udogodnień springa?

Do głowy przyszłymi 3 opcje:

  1. zrobić triggera na bazie - jeśli tak to pytanie gdzie wpisać sqla i jak by się nie kłóciło z tym co wymyśli jpa.
  2. wykorzystać aop i nałożyć na AddressRepository.save() by odpalał LocationRepository.save().
  3. w serwisie dodać:
    class AddressService {
    LocationService locationService;
    // ...
    void createNewAddress(Address address) {
        locationService.createNewLocation(address);
        // ...
    // ...
    }
edytowany 1x, ostatnio: aurel, 2018-12-27 10:21

Pozostało 580 znaków

2018-12-27 14:17
0

Zamiast tworzyć Address twórz od razu Location ( z Adress w środku). Problem rozwiązany.


Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.

Pozostało 580 znaków

2018-12-27 19:58
ogórek
0
jarekr000000 napisał(a):

Zamiast tworzyć Address twórz od razu Location ( z Adress w środku). Problem rozwiązany.

niestety nie rozwiązuje to problemu: dalej ktoś nieświadomy może chcieć zapisywać Address bez Location. Poza tym w tkaim przypadku muszę przenieść generowanie idka z Address do Location - zamapować na odwrót, bo teraz mam tak:

@Entity
public class Location {

    @Id
    @Column(name = "address_id", updatable = false)
    public final Long id;

    @OneToOne(cascade = CascadeType.PERSIST)
    @PrimaryKeyJoinColumn
    public final Address address;

    // ...

    public Location(Address address, Double longitude, Double latitude) {
        this.id = address.getId();
        this.address = address;
        this.longitude = longitude;
        this.latitude = latitude;
    }

// ...

Pozostało 580 znaków

2018-12-27 23:30
0

Ktoš nieświadomy może Ci zdropować triggera, a nawet zdropować całą bazę i wrzucić dane na temat produkcji gumowców rolniczych.

A przeniesienie tego id to nawet słuszny pomysł. Z opisu wynika, że twoim głównym rekordem jest location.


Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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