J'ai une question qui est plus dans le domaine de la conception, que de l'implémentation. Je suis également heureux pour quiconque de signaler des ressources pour la réponse et je serai heureux, de recherche pour moi-même.Bonne conception de mappage des objets de domaine Java aux tables (en utilisant Hibernate)
Java et SQL très simplifié:
Dire que j'ai un domaine d'affaires POJO appelé « Image » avec trois attributs.
class Picture
int idPicture
String fileName
long size
Dire que j'ai un autre domaine d'affaires POJO appelé "Item" avec 3 attributs
class Item
int idItem
String itemName
ArrayList<Picture> itemPictures
Ce serait une relation simple normale. Vous pourriez dire que l'objet 'Picture', n'existera jamais en dehors d'un objet 'Item'. On suppose une image appartient uniquement à un élément spécifique, mais qu'un élément peut avoir plusieurs images
maintenant - en utilisant une bonne conception de base de données (3ème forme normale), nous savons que nous devons mettre des articles et images dans leurs propres tables. Voici ce que je suppose serait correct.
table Item
int idItem (primary key)
String itemName
table Picture
int idPicture (primary key)
varchar(45) fileName
long size
int idItem (foreign key)
Voici ma question: Si vous effectuez des fichiers de mapping Hibernate pour ces objets. Dans la conception de données, votre table d'images a besoin d'une colonne pour faire référence à l'élément, de sorte qu'une relation de clé étrangère peut être maintenue . Toutefois, dans vos objets de domaine d'entreprise - votre objet Image ne contient pas de référence/d'attribut à l'idItem de Item - et n'a pas besoin de le savoir. Une instance d'image Java est toujours instanciée dans une instance d'élément. Si vous voulez connaître l'objet auquel l'image appartient à vous êtes déjà dans la bonne portée. Appelez myItem.getIdItem() et myItem.getItemPictures(), et vous avez les deux informations dont vous avez besoin.
Je sais que les outils Hibernate ont un générateur qui peut automatiquement rendre vos POJO de regarder à votre base de données. Mon problème vient du fait que j'ai planifié d'abord la conception des données pour cette expérience/projet . Puis quand je suis allé faire les objets java de domaine, je me suis rendu compte que une bonne conception a dicté que les objets contiennent d'autres objets d'une manière imbriquée. Ceci est évidemment différent de la façon dont un schéma de base de données est - où tous les objets (tables) sont plats et ne contiennent aucun autre type complexe en leur sein. Quel est un bon moyen de concilier cela?
-vous:
(A) Effectuez les fichiers de mappage de mise en veille prolongée afin que Picture.hbm.xml a une cartographie à la idItem des parents POJO terrain (s'il est même possible)
(B) Ajouter un attribut int dans la classe Picture pour faire référence à l'idItem et le définir à l'instanciation, simplifiant ainsi le fichier de mappage hbm.xml en ayant tous les champs de table comme attributs locaux dans la classe
(C) Corrigez la conception de la base de données car elle est faux, dork.
Je serais vraiment apprécier tous les commentaires
@M. McKenzie, voulez-vous nous donner des commentaires sur nos réponses? –