Quelle est la meilleure façon de mettre en œuvre des relations "many-to-many" à L'aide D'ORMLite?

je joue actuellement avec ORMlite pour faire un modèle avec des tables et des relations. Une relation plusieurs-à-plusieurs relations. Quelle est la meilleure façon de mettre en œuvre?

Pour être plus concret:

disons que j'ai ces deux tables

Product
   id
   brand

Purchase
   id
<!-Un achat peut avoir plusieurs produits et un produit peut être en plusieurs achats. En utilisant ORMLite je pourrais avoir un @ForeignCollectionField dans chaque modèle, mais je ne pense pas que cela fonctionnerait. La seule solution valable que je vois est faire un troisième achat de produit de table pour lier le produit et L'achat avec des relations de plusieurs à un.

Que voulez-vous les gens pensent?

19
demandé sur Romain Piel 2012-02-07 15:11:50

3 réponses

la réponse de@Romain est correcte, mais voici d'autres informations pour la postérité. Comme il le mentionne, il est un exemple plusieurs-à-plusieurs ORMLite projet qui démontre la meilleure manière de faire ceci:

http://ormlite.com/docs/example-many

L'exemple utilise une table de jointure avec l'identité de deux objets pour stocker une relation. Dans la question de @Romain, l'objet join aurait les deux Product et la Purchase objet. Quelque chose comme:

public class ProductPurchase {
    @DatabaseField(generatedId = true)
    private int id;
    @DatabaseField(foreign = true)
    private Product product;
    @DatabaseField(foreign = true)
    private Purchase purchase;
    ...
}

les champs id sont extraits des objets qui créent une table comme:

CREATE TABLE `userpost` (`id` INTEGER AUTO_INCREMENT , `user_id` INTEGER ,
    `post_id` INTEGER , PRIMARY KEY (`id`) ) 

vous utilisez alors des requêtes internes pour trouver le Product objets associés à chaque Purchase et vice versa. Voir lookupPostsForUser() méthode dans l'exemple de projet pour plus de détails.

il y a eu quelques réflexions et des travaux de design autour du fait de faire cela automatiquement, mais en ce moment ORMLite ne gère que les relations un-à-plusieurs interne.

27
répondu Gray 2012-11-11 18:53:19

Ok je suppose que la seule façon d'y aller est de créer une troisième table Product_Purchase. Il est indiqué dans un exemple de projet.

6
répondu Romain Piel 2012-02-07 13:41:08

vous devez créer une classe ProductPurchase et la gérer comme si c'était un autre objet qui doit aller dans votre base de données.

vous pouvez (mais vous ne devez pas) avoir une Collection de produits à L'intérieur des achats (et vice-versa) mais ils devront être mis à jour/créés manuellement lorsque vous chargez les relations entre les produits et les achats à partir de la table de linker ProductPurchase. Avoir ces collections ne signifie rien pour L'ORM (vous ne voulez pas et ne devrait pas annoter ils.)

si quelqu'un est à la recherche pour L'application Android avec la relation de plusieurs à plusieurs j'ai travaillé sur un exemple: https://github.com/arthurrauter/ormlite-android

-1
répondu Rauter 2016-06-27 13:46:19