Mysql
 sql >> Base de données >  >> RDS >> Mysql

Persistance des données non primitives dans JPA

OK, voilà,

Je suppose que vous construisez votre application avec Spring Boot, Hibernate comme ORM et probablement une sorte de base de données relationnelle (MySQL).

Concernant la conception de la base de données :

Oui, l'objet Patreon ici est l'entité propriétaire avec une relation OneToMany avec l'entité Item (puisqu'un Patreon peut avoir N objets).Votre entité Patreon pourrait avoir besoin de la refonte suivante :

1) Essayez d'utiliser des types non primitifs, en particulier pour les clés de table (identifiant long -> identifiant long).

2) Perdre le tableau des checkOutItems ainsi que la liste itemHistory. Tout d'abord, les relations doivent être modélisées à l'aide de collections et non de tableaux. Deuxièmement, vous n'avez pas besoin de ces deux éléments. Vous ne stockerez jamais les checkOutItems ni l'itemHistory de cette façon. Créez plutôt une List<Item> items qui stockera les éléments Patreon tout en décrivant la relation (voici quelques exemples :http:/ /www.baeldung.com/hibernate-one-to-many )

3) Encore une fois avec l'entité Item, vous devez perdre le tableau de l'historique. La seule chose dont vous avez besoin est une référence à l'entité propriétaire (Patreon dans ce cas) complétant ainsi le côté ManyToOne de la relation.

4) Notez que les champs Date doivent être annotés avec @Temporal fournissant également le type correct (vous pouvez lire pour en savoir plus).

5) La classe d'articles en général devrait faire l'objet d'une refonte.

5) Une fois que tout ce qui précède est en place et en supposant que vous utilisez Spring, vous pouvez créer un référentiel avec lequel vous pouvez interroger un objet Patreon, récupérant ainsi un objet avec ses entités associées (éléments).

Concernant vos questions :

Q1 : Oui, voyez-vous. Voir ci-dessus pour plus.

Q1.2 :Aucun tableau ne l'est. Les listes ou mieux encore les ensembles sont plus adaptés.

Q1.3 : Oui. La première est une annotation JPA utilisée dans les bases de données relationnelles tandis que la seconde est une annotation spécifique à Spring Data utilisée par des bases de données et des frameworks qui ne sont pas de ce type (relationnels) ou qui n'ont pas d'API de persistance standard définie (comme JPA). Car NonNull et NotNull sont à peu près les mêmes, le premier remplaçant en fait le dernier (ce qui se fait souvent). La seule différence que je vois est la cible. Vous pouvez en savoir plus ici :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 :Oui, il y en a. Voir ci-dessus.

Q3 :Avec un peu de conception intelligente, je ne vois pas le besoin de plus, mais si vous pensez que cela vous aidera, pourquoi pas. Il suffit de ne pas exagérer la conception et sa complexité