Каков наилучший способ реализации отношений «многие ко многим» с использованием ORMLite? - PullRequest
19 голосов
/ 07 февраля 2012

В настоящее время я играю с ORMlite, чтобы создать модель с таблицами и связями.Одно отношение - это отношение многих ко многим.Какой лучший способ реализовать это?

Чтобы быть более конкретным:

Допустим, у меня есть эти две таблицы

Product
   id
   brand

Purchase
   id

Покупка может иметь несколько продуктов иодин товар может быть в нескольких покупках.Используя ORMLite, я мог иметь @ForeignCollectionField в каждой модели, но я не думаю, что это сработает.Единственное правильное решение, которое я вижу, - это создать третью таблицу Product_Purchase, чтобы связать продукт и покупку с отношениями «многие к одному».

Что вы думаете, люди?

Ответы [ 3 ]

27 голосов
/ 07 февраля 2012

@ Самооценка Ромена верна, но вот еще немного информации для потомков.Как он упоминает, есть пример проекта «многие ко многим» ORMLite , который демонстрирует лучший способ сделать это:

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

В этом примере для хранения отношений используется таблица соединения с идентификаторами обоих объектов.В вопросе @ Romain, объект соединения будет иметь и объект Product, и объект Purchase.Что-то вроде:

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

Поля id извлекаются из объектов, которые создают таблицу, например:

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

Затем вы используете внутренние запросы, чтобы найти Product объекты, связанные с каждымPurchase и наоборот.Подробности см. В методе lookupPostsForUser() в примере проекта.

Были некоторые идеи и разработки, позволяющие сделать это автоматически, но сейчас ORMLite обрабатывает только отношения один-ко-многим внутри.

6 голосов
/ 07 февраля 2012

Хорошо, я думаю, что единственный способ - создать третью таблицу Product_Purchase.Это указано в примере проекта .

0 голосов
/ 27 июня 2016

Вы должны создать класс ProductPurchase и управлять им, как будто это еще один объект, который должен войти в вашу базу данных.

Вы можете (но не обязаны) иметь Коллекцию продуктов в Закупках (и наоборот), но их придется обновлять / создавать вручную, когда вы загружаете отношения между Продуктами и Покупками из компоновщика ProductPurchase Таблица. Наличие этих коллекций ничего не значит для ORM (вы не будете и не должны аннотировать их).

Если кто-то ищет приложение для Android с отношением «многие ко многим», я работал над примером: https://github.com/arthurrauter/ormlite-android

...