Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Utrwalaj nieprymitywne dane w JPA

OK, zaczynam,

Zakładam, że budujesz swoją aplikację za pomocą Spring Boot, Hibernate jako ORM i prawdopodobnie jakiejś relacyjnej bazy danych (MySQL).

Odnośnie projektowania baz danych:

Tak, obiekt Patreon jest tutaj właścicielem encji z relacją OneToMany do encji Item (ponieważ jeden Patreon może mieć N obiektów). Twoja encja Patreon może wykonać następujące przerysowanie:

1) Staraj się używać typów nieprymitywnych, zwłaszcza dla kluczy tabeli (long id -> Long id).

2) Utracić tablicę checkOutItems oraz listę itemHistory. Przede wszystkim relacje powinny być modelowane za pomocą kolekcji, a nie tablic. Po drugie, nie potrzebujesz tych dwóch. Nigdy nie będziesz przechowywać checkOutItems ani itemHistory w ten sposób. Zamiast tego utwórz List<Item> items który będzie przechowywać elementy Patreon podczas opisywania relacji (oto kilka przykładów:http:/ /www.baeldung.com/hibernate-jeden-do-wielu )

3) Ponownie z encją Item musisz stracić tablicę historii. Jedyne, czego potrzebujesz, to odniesienie do encji będącej właścicielem (w tym przypadku Patreon), uzupełniając w ten sposób stronę ManyToOne relacji.

4) Zwróć uwagę, że pola daty powinny mieć adnotację @Temporal podając również poprawny typ (możesz przeczytać więcej).

5) Ogólnie rzecz biorąc, klasa przedmiotu powinna wystarczyć do przeprojektowania.

5) Po wykonaniu wszystkich powyższych czynności i zakładając, że używasz Springa, możesz utworzyć repozytorium, za pomocą którego możesz wysłać zapytanie do obiektu Patreon, pobierając w ten sposób obiekt wraz z powiązanymi z nim encjami (elementami).

Jeśli chodzi o Twoje pytania:

P1:Tak, widzę. Więcej informacji znajdziesz powyżej.

P1.2:Żadne tablice nie są. Listy lub jeszcze lepiej Zestawy są bardziej odpowiednie.

P1.3:Tak, jest. Pierwsza z nich to adnotacja JPA używana w relacyjnych bazach danych, a druga to adnotacja specyficzna dla Spring Data używana przez bazy danych i frameworki, które nie są tego typu (relacyjne) lub nie mają zdefiniowanego standardowego API trwałości (jak JPA). Ponieważ wartości NonNull i NotNull są mniej więcej takie same, a pierwszy faktycznie zastępuje drugi (coś, co jest robione często). Jedyna różnica, jaką widzę, to cel. Możesz przeczytać więcej tutaj:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/lang/NonNull.html https://docs.oracle.com/javaee /7/api/javax/walidacja/ograniczenia/NotNull.html

P2:Tak, jest. Zobacz powyżej.

P3:Przy odrobinie sprytnego projektu nie widzę potrzeby więcej, ale jeśli czujesz, że to ci pomoże, czemu nie. Tylko nie przesadzaj z projektowaniem i jego złożonością



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Za duże dane POST. Zmniejsz dane lub zwiększ post_max_size

  2. Wypełnianie DataTable w C# przy użyciu MySQL

  3. Używanie LIKE w bindParam dla zapytania MySQL PDO

  4. jakie będzie zapytanie sql do sprawdzania tych samych par wartości kolumn w tabeli?

  5. Procedura składowana MySQL z parametrami