0

所以故事很简单。

我有一张名为 Products 的表和另一张名为 Categories 的表。此外,我还有另一个名为 ProductCategories 的表,它保存了类别与其对应产品的关系(即,该表有两列,ProductId 和 ColumnId)。

出于某种原因,在将所有这些表添加到我的实体模型之后,我没有“访问”权限,因此我可以执行 myentityModel.ProductCategories,因此我可以在这两个表之间建立关系项目。

是的,ProductCategores 表作为“关联”添加到实体模型中。我真的不明白。

编辑:

我确实看到,作为创建新“产品”的一部分,我可以传递“类别”的 EntityCollection。所以我从我的实体模型中查询用户选择的匹配类别列表(在网页上)。例如,我得到(在查询模型之后),一个“类别”的对象集。但是,我遇到了两个问题:

  1. 'AddObject' 只接受 EntityCollection,因此我需要重新创建一个集合,然后将 ObjectSet 中的所有对象添加到 entityCollection,在此过程中,我需要将其与之前的模型分离并将其添加到新集合中。如果没有,我得到一个例外。

  2. 当我执行 SaveChanges 时,我看到我得到一个异常,它实际上是在尝试创建新类别而不是添加新的 ProductCategory。再说一次,我在这里错过了什么吗?

谢谢。

4

1 回答 1

0

这听起来像是多对多的关系。在您的实体模型中,您不需要将连接表声明为单独的实体。相反,您将产品和类别之间的关系配置为多对多,并添加有关连接表的元数据。在 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 和遍历表连接。

于 2011-07-28T17:16:18.420 回答