2012-02-07 12 views
19

Attualmente sto giocando con ORMlite per creare un modello con tabelle e relazioni. Una relazione è una relazione molti-a-molti. Qual è il modo migliore per implementarlo?Qual è il modo migliore per implementare relazioni molti-a-molti utilizzando ORMLite?

essere più concreti:

Diciamo che ho queste due tabelle

Product 
    id 
    brand 

Purchase 
    id 

Un acquisto può avere diversi prodotti e uno dei prodotti può essere in diversi acquisti. Utilizzo di ORMLite Potrei avere un @ForeignCollectionField in ogni modello ma non penso che funzionerebbe. L'unica soluzione valida che vedo è creare una terza tabella Product_Purchase per collegare prodotti e acquisti con relazioni molte-a-uno.

Cosa ne pensate?

risposta

27

@ La risposta personale di Romain è corretta ma ecco alcune ulteriori informazioni per i posteri. Come egli cita c'è un esempio molti-a-molti ORMLite progetto che dimostra il modo migliore per farlo:

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

L'esempio utilizza una tabella unirsi ai id di entrambi gli oggetti per memorizzare una relazione. Nella domanda di @ Romain, l'oggetto join avrebbe sia lo Product sia l'oggetto Purchase. Qualcosa di simile:

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

I campi ID Come estratti dagli oggetti che crea una tabella come:

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

È quindi possibile utilizzare le query interne per trovare le Product oggetti associati a ogni Purchase e viceversa. Vedere il metodo lookupPostsForUser() nel progetto di esempio per i dettagli.

C'è stato un po 'di pensiero e di progettazione attorno a farlo automaticamente ma in questo momento ORMLite gestisce solo le relazioni uno-a-molti internamente.

+0

Ok grazie mille grigi! Volevo solo essere sicuro e l'hai spiegato bene. –

+1

Grazie anche per la risposta, ma Gray, questo fatto è davvero scarsamente documentato .. Non va bene per le enormi app Android che vogliono usare ORMLite .. – eento

+0

Puoi essere più specifico @eento? Puoi scrivere alcuni documenti migliori? – Gray

6

Ok, suppongo che l'unica soluzione sia creare una terza tabella Product_Purchase. È indicato in un sample project.

-1

Devi creare una classe ProductPurchase e gestirla come se fosse un altro oggetto che deve entrare nel tuo Database.

È possibile (ma non è necessario) disporre di una raccolta di prodotti all'interno degli acquisti (e viceversa) ma dovranno essere manualmente aggiornati/creati quando si caricano le relazioni tra prodotti e acquisti dal ProductPurchase tabella linker. Avere queste raccolte non significa nulla per l'ORM (non le annoterai e non dovresti annotarle).

Se qualcuno è alla ricerca di e App Android con la relazione molti-a-molti ho lavorato su un esempio: https://github.com/arthurrauter/ormlite-android

Problemi correlati