добавление записей в «реляционную» таблицу в модели сущностей?Как я могу это сделать? - PullRequest
0 голосов
/ 28 июля 2011

так что история очень проста.

У меня есть одна таблица под названием Продукты, а другая - Категории.Кроме того, у меня есть еще одна таблица с именем ProductCategories, в которой хранится отношение катеторий к соответствующим продуктам (т. Е. Таблица имеет два столбца, ProductId, ColumnId).

По какой-то причине после добавления всех этих таблиц в мойМодель сущности, у меня нет «Доступа» к ней, поэтому я могу сделать myentityModel.ProductCategories, чтобы я мог реляционные элементы между этими двумя таблицами.

И да, таблица ProductCategores добавлена ​​как «Ассоциация»к модели объекта.Я не очень понимаю это.

РЕДАКТИРОВАТЬ:

Я вижу, что в рамках создания нового "продукта" я могу передать EntityCollection "Категория".Поэтому я делаю запрос из моей модели сущностей на список подходящих категорий, выбранных пользователем (на веб-странице).так, например, я получаю (после запроса модели) набор объектов «Категория».Однако я столкнулся с двумя проблемами:

  1. , AddObject принимает только EntityCollection, поэтому мне нужно заново создать набор и затем добавить все объекты из ObjectSet в entityCollection, вэтот процесс мне нужно отсоединить его от предыдущей модели и добавить его в новую коллекцию.если нет, я получаю исключение.

  2. , когда я делаю SaveChanges, я вижу, что получаю исключение, что оно фактически пыталось создать новую категорию, а не добавлять новую ProductCategory.Опять же, я что-то здесь упускаю?

Спасибо.

1 Ответ

0 голосов
/ 28 июля 2011

Это звучит как отношения «многие ко многим».В вашей модели сущностей вам не нужно объявлять таблицу соединений как отдельную сущность.Вместо этого вы настраиваете отношения между Продуктами и Категориями как «многие ко многим» и добавляете метаданные о таблице соединений.В Hibernate у вас будет:

    @ManyToMany(targetEntity=Categories.class, cascade={CascadeType.ALL}, fetch = FetchType.LAZY)
    @JoinTable(name="tb_products_categories",
        joinColumns=@JoinColumn(name="category_id"),
        inverseJoinColumns=@JoinColumn(name="product_id")
    )
    @IndexColumn(name="join_id")
    public List<Categories> getCategories() {
        return categories;
    }

Когда вы выполняете запрос, уровень ORM заботится об определении SQL и обходе таблиц.

...