Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Behalten Sie nicht-primitive Daten in JPA bei

OK, los geht's,

Ich gehe davon aus, dass Sie Ihre Anwendung mit Spring Boot, Hibernate als ORM und wahrscheinlich einer Art relationaler Datenbank (MySQL) erstellen.

Bezüglich DB-Design:

Ja, das Patreon-Objekt hier ist die besitzende Entität mit einer OneToMany-Beziehung zur Artikelentität (da ein Patreon möglicherweise N Objekte hat). Ihre Patreon-Entität könnte die folgende Umgestaltung vertragen:

1) Versuchen Sie, nicht primitive Typen zu verwenden, insbesondere für Tabellenschlüssel (lange ID -> lange ID).

2) Verlieren Sie das Array von checkedOutItems sowie die itemHistory-Liste. Zunächst einmal sollten Relationen mit Sammlungen und nicht mit Arrays modelliert werden. Zweitens brauchen Sie diese beiden nicht. Auf diese Weise werden Sie niemals die "checkedOutItems" oder die "itemHistory" speichern. Erstellen Sie stattdessen eine List<Item> items das die Patreon-Elemente speichert, während es die Beziehung beschreibt (hier sind einige Beispiele:http:/ /www.baeldung.com/hibernate-one-to-many )

3) Wieder müssen Sie mit der Item-Entität das Array des Verlaufs verlieren. Das einzige, was Sie dort brauchen, ist ein Verweis auf die besitzende Entität (in diesem Fall Patreon), wodurch die ManyToOne-Seite der Beziehung vervollständigt wird.

4) Beachten Sie, dass Datumsfelder mit @Temporal kommentiert werden sollten auch den korrekten Typ angeben (weitere Informationen finden Sie hier).

5) Die Item-Klasse im Allgemeinen sollte ein Redesign vertragen.

5) Nachdem alle oben genannten Punkte vorhanden sind und Sie Spring verwenden, können Sie ein Repository erstellen, mit dem Sie ein Patreon-Objekt abfragen und so ein Objekt zusammen mit seinen zugehörigen Entitäten (Items) abrufen können.

Zu Ihren Fragen:

Q1:Ja, es sieht. Siehe oben für mehr.

Q1.2:Nein Arrays sind es nicht. Besser geeignet sind Listen oder besser Sets.

Q1.3:Ja, das gibt es. Die erste ist eine JPA-Annotation, die in relationalen Datenbanken verwendet wird, während die zweite eine Spring Data-spezifische Annotation ist, die von Datenbanken und Frameworks verwendet wird, die nicht von diesem Typ sind (relational) oder für die keine standardmäßige Persistenz-API definiert ist (wie JPA). Denn NonNull und NotNull sind ungefähr gleich, wobei ersteres tatsächlich letzteres überlagert (etwas, das oft gemacht wird). Der einzige Unterschied, den ich sehe, ist das Ziel. Hier können Sie mehr lesen: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

F2:Ja, das gibt es. Siehe oben.

F3:Mit ein bisschen cleverem Design sehe ich keinen Bedarf für mehr, aber hey, wenn Sie glauben, dass es Ihnen helfen wird, warum nicht. Übertreibe es nur nicht mit dem Design und seiner Komplexität