REST: domena będąca podzbiorem drugiej

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);
        // ...
    // ...
}
0

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

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;
	}

// ...
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.

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