hej mirki. Jest ktoś łopatologicznie mi wyjasnic sens uzywania liquibase w kontekscie hibernate?
Przykladowo caly czas jak chcialem robić klasy tabele albo cos pozmieniac to po prostu w danej klasie, ktora byla encja dopisywalem odpowiednie pola, ktore mi sie mapowaly na odpowiednie kolumny w tabeli.
No i teraz generalnue ten liquibase co ma na celu w tym wszystkim? czemu tworzenie tego changeloga jest bardzo wazne?
#spring #java #hibernate #programowanie
@Volantie Jeśli piszesz sobie coś do szuflady to wystarczy autogenerowanie create/update przy starcie. Jednak jeśli projekt ma być używany i utrzymywany toole w stylu liquibase robą się niezbędne.

Po pierwsze masz wtedy gwarancje że struktura bazy danych zawsze będzie taka sama, niezależnie ile razy uruchamiałeś aplikacje i w jakich wersjach. Jednak największą zaletą jest umożliwienie pisania skryptów migracyjnych. Wyobraź sobie że w wyniku implementacji jakiejś funkcji w pewnej wersji pojawiło się nowe
@Volantie: wyobraź sobie ogarnięcie 5 klientów, z ich bazami danych, z których każdy ma swoich DBA i grzebią w nich sami. Teraz dorzuć do tego, że twoja aplikacja ma 21 lat, 370 wydanych wersji. Każda z tych wersji wprowadza zmiany na bazie i każdy z klientów ma różne wersje. Każdy klient ma bardzo wrażliwe dane i nie chce niedostępności.
Flyway/liquibase czy inne systemy wersjonowania bazy zdejmują udrękę ogarniania tego. Biblioteka sama
Mam sobie POJO, które dostaje na wejściu. I teraz potrzebowałbym w jak najszybszy (najprostszy) sposób zapisać go do bazy przez JPA.
Niestety nie mam dostępu do modelu i nie moge go opisać annotacjami.

Jest jakis sensowny sposób aby to ogarnąc (zapewne będzie z 20-30 pojo/enumów) z tego co znalazlem to najbardziej sensowne:
- stworzyc encje i mapper (np. mapstruct)
- wygenerowac pliki hbm (jest jakis generator?), bo reczne pisanie troche odpada

#
via Android
  • 0
@Myzreal widziałem sugestie jako jedno z rozwiązań. Adapter i a notacje na getterach. Tylko gość napisał że nie ma pewności czy to działa. Wychodzi na to ze będę musiał szybki test zrobić. Bo to nawet sensowne rozwiązanie.
Jest ktoś w stanie powiedzieć jak zrobić w kodzie z hibernate, żeby powstał problem n+1?
Czytam, że same relacje nie wystarczą bo będzie problem n+1, trzeba się wspomagać fetch joinem czy innymi rozwiązaniami, a u mnie w ogóle ten problem nie występuje ( ͡° ʖ̯ ͡°)
Jak będę miał zadanie na live codingu żeby zmapować encje to mam na to zwrócić uwagę czy olać bo ten problem już
Pytanie z kategorii #java #hibernate #springboot

Biorę po sto zł z konta każdej z drużyn i słucham państwa!

Kto zgadnie, co było przyczyną tego jakże wymownego błędu?


Ps. Mamy rok 2023, Clean Code wydano prawie 15 lat temu (mimo, że w "szczegółach implementacyjch" wujka Boba można aktualnie nie zgadzać się z nim, to przesłanie dotyczące ergonomii kodu jest nadal dość żywe), Spring Boot chwali się ponad 100 milionami pobrań, Hibernate ponad 200
PaaD - Pytanie z kategorii #java #hibernate #springboot 

Biorę po sto zł z konta każ...

źródło: Ancient-Aliens

Pobierz
via Wykop
  • 1
@draxgar
Dialekt był ustawiony, propertiesy wyglądały mniej więcej tak:

spring.datasource.url=jdbc:h2:file:~/mytest123
spring.datasource.driver-class-name=org.h2.Driver
spring.jpa.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.datasource.username=sa
spring.datasource.password=

@Hatespinner:

Przecież pierwszy link z googla wyjaśnia, co trzeba zrobić poprawnie:

Metodą prób i błędów, czyli podmieniając propertiesy po kolei, też w końcu znalazłem przyczynę. Po prostu po narzędziach, które są rozwijane od wielu lat, aktywnie wykorzystywane przez miliony programistów, i de facto standardem od lat, spodziewałbym się trochę lepszej ergonomii. Sam mam na tyle doświadczenia, żeby
Mam encję User która ma w sobie taką kolekcję:

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "userid", nullable = false)
private Set<UserRole> userRoles;

A ta encja userRole wygląda tak:

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "role
id")
private Role role;

@Column(name = "roleid", insertable = false, updatable = false)
private Integer roled;

@Column(name = "user
id", insertable = false, updatable = false)
private Integer
@Murasame: By hibernate nie tworzył nowych obiektów Role, trzeba użyć polecenia merge() w celu połączenia istniejącego obiektu Role z bazą danych. Następnie trzeba ustawić cascade na merge() dla encji UserRole, aby hibernate przeprowadził tę operację automatycznie w trakcie tworzenia usera i dodawania listy ról.

Przykładowo:

@OneToMany(cascade = CascadeType.MERGE, orphanRemoval = true)
@JoinColumn(name = "userid", nullable = false)
private Set<UserRole> userRoles;
Jak mam dwie klasy Entity powiązane ze sobą dwukierunkową relacją ManyToMany np. User i Discount to dobrym pomysłem będzie dorobienie pola w klasie User: Map?

Potrzebuję wiedzieć czy jest aktywna zniżka czy nie. A jak zmienię pole isActivated w bazie na dowolnym obiekcie Discount to będzie to zmiana widoczna dla wszystkich użytkowników, którzy korzystają z tej zniżki, a ja chcę tylko dla jednego usera. ( ͡° ʖ̯ ͡°)
takiMirek29 - Jak mam dwie klasy Entity powiązane ze sobą dwukierunkową relacją ManyT...

źródło: comment_1672406366yzXDsx5yplhxx5HKFEldfe.jpg

Pobierz
Mam problem z cykliczną zależnością referencji w hibernate tzn. przykładowo mamy dwie klasy autor (posiada pole set), z adnotacja manyToMany i przy pobieraniu jakiegos autora wywala blad bo przez metode toString mamy cykliczna zaleznosc. Dalem jsonignore na te pola, ale co mi z tego jak ja chce zwrocic pelen obiekt razem z tymi polami. Jak to zrobic?

amatorski picrel
#java #hibernate #spring #naukaprogramowania
nick230 - Mam problem z cykliczną zależnością referencji w hibernate tzn. przykładowo...

źródło: comment_16723132476Py2lH6WOTAGD1yafCfdLH.jpg

Pobierz
@nick230: W toString powinny być tylko i wyłącznie pola należące do tej encji, bez dociągania zależności z innych. Pchasz się w N+1.... Nie panujesz nad wykonywanym zapytaniem. Włącz wypisywanie zapytań hibernate w konfiguracji springa.
Mirki z #programista15k , wiem że "rychło w czas", ale mam budżet szkoleniowy do wydania do końca roku, a czasu na szkolenia brakuje ¯\_(ツ)_/¯ ... Podrzucicie mi, proszę, jakieś sensowne kursy, np. na #udemy (ale niekoniecznie), z tematów w stylu:
- zaawansowane rzeczy w #java
- zaawansowane rzeczy w #spring
- coś fajnego o JPA / #hibernate / Spring Data itd
- cokolwiek o około-programistycznych rzeczach, typu #docker , #kubernetes , #
hibernate.cfg.xml - wpisuje credentials do bazy, zapisuje do pliku. Robię maven package no i plik zmienia się na starą wersję. Próbowałem clean package, ale nie działa. Co zrobić? Nie mam doświadczenia z #maven #java #hibernate a dostałem takie zadanie. #stazysta15k ( ͡° ͜ʖ ͡°)
Jaki jest najbardziej efektywny sposób sprawdzania jakie są różnice między tym co w bazie a miedzy tym co przychodzi z api? Może ktoś rzucić jakiś buzzword?

Chodzi o sytuację kiedy na bazie jest np. 10 000 rekordów w kilku tabelach i codziennie odpytuje się zewnętrzne api po te dane, jak wychwycić co trzeba będzie zaktualizować, co nowego dodać, co usunąć, a co przywrócić (poprzez soft delete)? Póki co pomysłem jest dodanie hash
@MrFisherman: nie rozumiem, co masz na mysli z tym opieraniem się na id

robisz coś w stylu:

MERGE docelowa_tabela as target
using ta_nasza_tabela_tymczasowa_z_danymi_z_api as source
ON source.jakas_kolumna = target.jakas_kolumna
and source.jakas_kolumna_o_innej_nazwie = target.jakas_inna_kolumna
--and itd
when matched then
-- kod odpowiedzalny za update
when not matched by target then
-- kod odpowiedzialny za insert
when not matched by source then
-- kod odpowiedzialny za delete

jeśli dodasz jeszcze OUTPUT to będziesz
Mam aplikację do zarządzania taskami przez zalogowanego usera (taka todolista na sterydach) i teraz pytanie - czy na pewno potrzeba tutaj relacji OneToMany między encją User i encją Task? Tworzy to dość silny coupling między modułami i utrudnia enkapsulację. Przecież apka działa tak, że user loguje się i zarządza swoimi taskami. Teraz to wygląda tak, że już po zalogowaniu jak np. user chce dodać taska, to ten user jest pobierany z repo
No właśnie. Nawet w bazie relacyjnej a takiej używam, User nic nie wie o żadnych Taskach tylko Taski mają klucz obcy w postaci UserId jak sam powiedziałeś, więc czemu by tego nie zamodelować w taki sam sposób bez jakiś relacji czy to jednokierunkowych czy dwukierunkowych?


@Edelner: przecież klucz obcy to tak naprawdę pomoc dla ciebie. Identyczna sytuacja jak w dyskusji "statyczne typowanie vs dynamiczne". Tabelki są tak elastyczne, że możesz robić
Hibernate 5 – z okazji 30 finału WOŚP

▶️Organizuję retransmisję ponad 4h godzinnego szkolenia na temat Hibernate 5.
▶️ Udział jest bezpłatny, jednak wydarzenie jest organizowane z okazji 30 finału WOŚP. Dlatego szczera prośba o wsparcie akcji i wpłatę do naszej skarbonki.
▶️ Wydarzenie odbędzie się 29 stycznia o 19:00
▶️Więcej szczegółów w tym program szkolenia i rejestracja na stronie wydarzenia:
https://bykowski.pl/szkolenie-hibernate-5-wosp

#programowanie #naukaprogramowania #java #informatyk #ciekawostki #jvm #byczazagroda #framework #kariera #
@masterix: Rejestracja była o 19:00, więc jeśli nie zdążyłeś się zrejestrować to przepadło. Natomiast jeśli się zarejestrowałeś, to link dostępowy przyszedł Ci na maila i możesz dołączyć w każdym momencie :)
@PaaD: @Fiber: Ja oglądałem wszystkie filmiki od tego gościa i przerobiłem ćwiczenia które zaleca, wpisz sobie Thorben Janssen. Trochę grindowałem, nie powiem ale wyszło mi to na plus.

Teraz zaczął wrzucać nowe materiały, to od jakiegoś pół roku przestałem go śledzić. Aczkolwiek gość jest naprawdę ogarnięty, a przerabiałem wiele rzeczy z Hibernate.
@Fiber bardzo polecam blog lub książkę vlad mihalcea. Osobiście uważam, że każdy kto ma jakąkolwiek styczność z hibernate powinien przeczytać jego blog lub książkę. Opisuje jak najwydajniej i najlepiej korzystać z hibernate.
W zasadzie to w każdym projekcie jakim byłem było popełniane wiele błędów przy pracy z hibernate. Gdyby każdy przeczytał i wpoił jego bloga/książkę to nie byłoby tych błędów ( ͡º ͜ʖ͡º)
że tworzenie aplikacji komercyjnych na sensownym poziomie


@Spook: w praktyce to bardziej utrzymywanie aplikacji komercyjnych na sensownym poziomie. Postaw sobie ze dwie apki w pełnym ekosystemie tj. baza, spring, prosty front na jakimś ajaxie, wszystko zdokeryzowane. Naucz się jak spring zarządza tranzakcjami pod spodem (AOP), jak działa javowy procesor adnotacji, bajtkod.

Wbrew temu co pisze część wykopków, język to naprawdę tylko narzędzie. O ile nie przechodzisz z webdevu na embedded czy
@Spook: zasady programowania i dobre praktyki są ogół niezależne od języka. Co za różnica czy będziesz pobierać pakiety z mavena, npm czy packagist? W gruncie rzeczy chodzi o to samo. Mi to zajęło może kilka tygodni dodatkowej pracy po godzinach. Dodatkowo wiele zależy od projektu, ludzi i praktyk w nim przyjętych.
via Wykop Mobilny (Android)
  • 0
#programowanie #java #hibernate #spring

Polecicie jakiś dobry tutorial odnośnie implementacji relacji pomiędzy encjami? Tzn. OneToMany, ManyToMany, ManyToOne, JoinTable , lazy, eager itd?

W samym SQL ogarniam modelowanie bazy. Ale co mi wyplują w bazie klasy Javowe w JPA i kiedy której używać, żeby nie było problemu N+1 to już nie mam pojęcia.
via Wykop Mobilny (Android)
  • 0
@aloucie: no oczywiście, że developersko używam automatycznego generowania, żeby zobaczyć co wychodzi. Na produkcji oczywiście tylko validate i zmiany z Liquibase. Ale nie o tym jest ten wpis. To mam ogarnięte. Czego innego nie mam.