Plusieurs-à-Plusieurs tables dans graal (GORM) / hibernate
Je suis en train de jouer de la marge avec le Graal et suis trouver les ORM trucs fastidieux parce que je ne comprends pas tout ce que je fais quand il s'agit de classes du domaine. J'espère que quelqu'un peut me remettre sur la bonne voie
De considérer les éléments suivants
Travail de Test : Nombre de Matériel Utilisé sur l'Emploi Nombreux:Un Matériel Physique
...ceci est analogue à la classique Commande, OrderLine, Produit scénario vu dans l'université DB exemples
J'ai créé les classes du domaine
class Job
{
String jobName
String jobDescription
}
class HardwareOnJob
{
static hasMany = [ jobs:Job, physicalHardware:PhysicalHardware ]
static belongsTo = Job
String role
}
class PhysicalHardware
{
String assetName
String model
String os
}
La question j'ai besoin de demander, c'est pourquoi ne Graal créer moi deux tables dans ma base de données plutôt que d'utiliser le lien entité du domaine/catégorie que j'ai définie. Par exemple Graal crée hardware_on_job_job et hardware_on_job_physical_hardware dans la base de données.
À l'aide de la échafaudée contrôleurs je peux entrer un peu de matériel, entrez un emploi et entrez ensuite de relier les deux. La question que je me pose est pourquoi faut-il créer ces deux tables supplémentaires plutôt que d'utiliser l'objet de domaine (HardwareOnJob) j'ai précisé.
Toute aide/conseils serait très apprécié que d'aller de noix à la recherche à cela et d'essayer de nouvelles choses. Btw, je suis sur le graal de la version 1.2.1 de
OriginalL'auteur K2J | 2010-02-10
Vous devez vous connecter pour publier un commentaire.
Ont un look à la
joinTable
mot-clé qui:Voici l'exemple du guide de l'utilisateur:
OriginalL'auteur Heinrich Filter
envisager l'utilisation d'une association explicite de la classe/de la table. voir les membres de la classe dans http://www.grails.org/Many-to-Many+Cartographie+sans+Hibernate+XML
un autre avantage est d'échafaudage pour l'association de la classe (vous n'obtiendrez pas sans une association explicite de la classe).
OriginalL'auteur Ray Tayek
Lors de l'utilisation d'un-à-plusieurs ou plusieurs-à-plusieurs relations graal crée une table de jointure contenant les ID des objets dans la relation. Vous pouvez éviter d'utiliser la table de jointure en disant graal pour utiliser une clé étrangère dans une relation. À ma connaissance, il n'existe aucun moyen d'éviter d'utiliser le créé automatiquement table de jointure dans une relation plusieurs-à-plusieurs. Pour plus d'info voir les sections 5.2.1.2 et 5.2.1.3 de cette ainsi que cette
OriginalL'auteur Jared
Ok, donc après avoir joué, je suis venu avec la structure suivante
Ne ce look sensible à tous les autres? La structure de base de données qui a été créé l'air beaucoup plus sympathique et a seulement trois tables-je m'attendre.
Intéressé à entendre les pensées de peuples que je viens d'un relationnel de fond. Je suis à la recherche à la création de l'objet comme un moyen de donner une claire conception bd du point de vue de garder les choses simples pour en faire rapport.
Commentaires bienvenus
Pourquoi êtes-vous en précisant l'id de colonnes? Vous devez supprimer le mappage de la colonne d'id entièrement.
Si vous pouvez me dire pourquoi je devrais être en train de faire que cela les aidera dans ma compréhension, comme je l'ai dit je suis nouveau graal. De nombreux développeurs complètement abstraction de la base de données et de le traiter comme un bête couche de stockage. Considérer lors de l'application en ligne et les données commencent à s'accumuler. J'ai envie d'une belle et compréhensible conception de base de données que je peux rédiger des rapports contre facilement. La raison pour le lien de la table, c'est que je veux stocker un élément comme une quantité en ligne avec les champs de lier les tables. Considérons une ligne de commande ce qui fait une facture. Espérons que tout fait sens.
OriginalL'auteur K2J
Brièvement, si l'Enfant a exactement un Parent, puis s'en Parent, vous mettez
et de l'Enfant, vous mettez
(ou si vous ne voulez pas en cascade, je pense juste ajouté "Parent parent" serait suffisant, mais c'est plus rare cas, je suppose)
Cela crée un bi-direction de la relation, en ce que, dans un domaine enfant objet, vous pouvez accéder à l'objet parent par le biais de la propriété, et dans un objet parent, vous avez la collection d'enfants.
Normalement, il va créer une colonne de l'Enfant, la tenue de l'id de son Parent. Ce ne peut être le cas pour beaucoup pour beaucoup, une sorte de table de lien sera nécessaire (et GORM pouvez gérer cela). Soi-disant "unilatérale" des relations (que vous avez dans votre premier exemple) peut également créer un lien tables, ce qui est expliqué un peu par ceci:
http://grails.1312388.n4.nabble.com/Many-to-many-vs-Many-to-one-td1369336.html
OriginalL'auteur user606153