sql >> Database teknologi >  >> RDS >> Mysql

Vedvarende ikke-primitive data i JPA

OK her går,

Jeg går ud fra, at du bygger din applikation med Spring Boot, Hibernate som din ORM og sandsynligvis en slags eller relationel database (MySQL).

Angående db design:

Ja, Patreon-objektet her er ejerenheden med en OneToMany-relation til Item-entiteten (da én Patreon kan have N objekter). Din Patreon-enhed kunne gøre følgende:

1) Prøv at bruge ikke-primitive typer især til tabelnøgler (langt id -> Langt id).

2) Mister rækken af ​​checkedOutItems samt itemHistory-listen. Først og fremmest skal relationer modelleres ved hjælp af samlinger og ikke arrays. For det andet behøver du ikke disse to. Du vil aldrig gemme checkedOutItems eller itemHistory på denne måde. Opret i stedet en List<Item> items der gemmer Patreon-emnerne, mens forholdet beskrives (her er nogle eksempler:http:/ /www.baeldung.com/hibernate-one-to-many )

3) Igen med vareenheden skal du miste historikken. Det eneste, du har brug for, er en reference til den ejerende enhed (Patreon i dette tilfælde) og dermed fuldende ManyToOne-siden af ​​relationen.

4) Bemærk, at Dato-felter skal annoteres med @Temporal giver også den korrekte type (du kan læse mere).

5) Vareklasse bør generelt gøre med et redesign.

5) Når alt det ovenstående er på plads og forudsat at du bruger Spring, kan du oprette et lager, hvormed du kan forespørge et Patreon-objekt og dermed hente et objekt sammen med dets relaterede entiteter (genstande).

Angående dine spørgsmål:

Q1:Ja det ses. Se ovenfor for mere.

Q1.2:Nej arrays er ikke. Lister eller endnu bedre sæt er mere egnede.

Q1.3:Ja det er der. Den første er en JPA-annotation brugt i relationsdatabaser, mens den anden er Spring Data-specifik annotation, der bruges af databaser og rammer, der ikke er af denne type (relationelle) eller ikke har en standard persistens API defineret (som JPA). For NonNull og NotNull er nogenlunde det samme, hvor førstestenen faktisk oversætter sidstnævnte (noget der ofte gøres). Den eneste forskel, jeg ser, er målet. Du kan læse mere her:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/lang/NonNull.html https://docs.oracle.com/javaee /7/api/javax/validation/constraints/NotNull.html

Q2:Ja det er der. Se ovenfor.

Spørgsmål 3:Med lidt smart design kan jeg ikke se behovet for mere, men hey Hvis du føler, det vil hjælpe dig, hvorfor ikke. Bare lad være med at overdrive designen og dens kompleksitet



  1. Unionsforespørgsler fra forskellige databaser i Laravel Query Builder

  2. Fandt 'OR 1=1/* sql-injektion i min nyhedsbrevsdatabase

  3. R- Specialtegn indsættes ikke i mysql

  4. MySQL/PDO::quote(), Sætter enkelte anførselstegn omkring heltal