Intereting Posts

Каков наилучший способ реализации отношений «многие ко многим» с использованием ORMLite?

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

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

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

Product id brand Purchase id 

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

Что вы думаете?

Solutions Collecting From Web of "Каков наилучший способ реализации отношений «многие ко многим» с использованием ORMLite?"

@ Ответ самого Ромена верен, но вот еще информация для потомков. Как он упоминает, есть пример проекта «много ко многим 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 обрабатывает только отношения «один ко многим».

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

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

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

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