Spring Boot - integracja aplikacji z już istniejącą bazą bez obawy o utratę danych.

0

Cześć.

Ostatnio dużo pytam :D. ale lecę strasznie do przodu z tematem, a pierwsza praca już prawie w mojej garści.

Mam pytanie odnośnie integracji apki z bazą danych. Załóżmy, że baza już sobie istnieje. Jest w niej dużo danych, a ja chcę ją podpiąć pod stworzoną aplikację.
Czy w takim wypadku normalnie tworzę sobie klasy oznaczone adnotacjami @Entity odzworowujące dokładnie strukturę danych? Czy może mogę pominąć tworzenie klas encji i zrobić od razu DTO?

I teraz dwa pytania w zależności od tego, który sposób z powyższych jest właściwy:

  1. Jeżeli i tak muszę tworzyć Entity , to jak się zabezpieczyć przed nadpisaniem tabel? Odpowiednio uzupełniam w application.properties komendę spring.jpa.hibernate.ddl-auto=???? ?

  2. Jeżeli DTO, to jak pobrać interesujące mnie dane? Gdzie przygotować zapytania? Chociaż i tak ta opcja wydaje mi się nieco nieprawdopodobna, bo przecież do bazy trzeba zapisać obiekt entity z odzworowanymi wszystkimi danymi...

Ktoś wskaże właściwy tok myślenia?

0

Dziwne pytanie.

  1. Jak wyobrażasz sobie trzymać tylko DTO?
    A co jeśli będzie trzeba zmienić dane, które nie wchodzą w DTO?

  2. Zgodnie z dokumentacją, spring.jpa.hibernate.ddl-auto jest ustawione defaultowo na none. Więc jak usuniesz ten wpis konfiguracyjny to będzie ok.

0

Ze swojej strony dodam, że warto zainteresować się narzędziami typu liquibase czy flyway - używanie spring.jpa.hibernate.ddl-auto jest zazwyczaj złą praktyką. Używając narzędzi do migracji, każdy deweloper na każdym środowisku będzie miał tą samą wersję bazy.

0
  1. Nie rozumiem pytania. Jak chcesz tam zapiąć Hibernate to robisz sobie klsay Entity, jak nie to możesz jakiś obiekt i mapować sobie resultset na te obiekty. Jak hibernate ale baza już jest to daj tam verify i ci powie czy pasują te twoje klasy do tabel.
  2. Nie rozumiem pytania. No piszesz sobie klasę Repository jakąś, tam wrzucasz query i budujesz z nich obiekty. Zauważ ze przecież nie musisz z bazy wyciągać wszystkiego z danej tabeli, albo tylko z jednej tabeli. Możesz zrobić sobie obiekt ktory ma jakieś 2 pola a query to będzie jakieś select a.x, b.y from a join b on.... i voila.
1
Shalom napisał(a):
  1. Nie rozumiem pytania. Jak chcesz tam zapiąć Hibernate to robisz sobie klsay Entity, jak nie to możesz jakiś obiekt i mapować sobie resultset na te obiekty. Jak hibernate ale baza już jest to daj tam verify i ci powie czy pasują te twoje klasy do tabel.

Chodzi Ci o coś takiego w application.properties: spring.jpa.hibernate.ddl-auto=validate ?

Nie rozumiem pytania. No piszesz sobie klasę Repository jakąś, tam wrzucasz query i budujesz z nich obiekty. Zauważ ze przecież nie musisz z bazy wyciągać wszystkiego z danej tabeli, albo tylko z jednej tabeli. Możesz zrobić sobie obiekt ktory ma jakieś 2 pola a query to będzie jakieś select a.x, b.y from a join b on.... i voila.

Czyli normalnie tworzę pełną encję, a w funkcji w repository wyciągam dane z obiektu enity i typ zwracany ustawiam na wybrane DTO wypełniając je wyciągniętymi polami?

0
  1. Tak, validate ;]
  2. Nie. Po co ci te Entity w ogóle? Masz dla nich jakieś zastosowanie sensowne?
0
Shalom napisał(a):
  1. Nie. Po co ci te Entity w ogóle? Masz dla nich jakieś zastosowanie sensowne?

Hmmm, na moje oko nie potrzebuje jej przy select'ie z bazy, ale na przykład przy jakiesTamRepository.save(obiekt) chyba czy wymagane jest zapisanie (podanie w argumencie metody save) kompletnej encji?

0

No jeśli musisz używać Hibernate/JPA to tak. Ale znów: czy serio musisz? That's so 90s ;) Wiesz że oprócz select da się też robić np. delete oraz update?

0
Shalom napisał(a):

No jeśli musisz używać Hibernate/JPA to tak. Ale znów: czy serio musisz? That's so 90s ;) Wiesz że oprócz select da się też robić np. delete oraz update?

Tak tak, ale mi chodzi o insert nowego obiektu do bazy. Zakładając scenariusz, że wszystkie wartości encji nie mogą być null, to takim DTO z niekompletnymi polami w stosunku do tego co jest w bazie nie uda mi się do niej dodać.

EDIT: A dobra, czaję - jak uzywam Hibernate/JPA (a używam, bo tylko to na razie umiem) to z DTO robie encje i dopiero insert.

1

Rozumiem ze to jest taki CRUD? Że z frontu przychodzi ci DTO zmapowane jakimś jacksonem z jsona a potem chcesz to zapisać do bazy? Tak, musisz to przemapować na kolejne DTO tym razem takie z adnotacją Entity i zapisać w bazie ;]

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