故事很简单。
我有一个名为Products的表和另一个Called类。另外,我有另一个名为ProductCategories的表,它保存了相应产品的相关关系(即表中有两列,ProductId,ColumnId)。
出于某种原因,在将所有这些表添加到我的实体模型后,我没有“访问”它,因此我可以执行myentityModel.ProductCategories,所以我可以在这两个表之间的关系项。
是的,ProductCategores表被添加为实体模型的“Association”。我真的不明白。
编辑:
我确实看到,作为创建新“产品”的一部分,我可以传递“类别”的EntityCollection。所以我从我的实体模型中查询用户选择的匹配类别列表(在网页上)。所以例如,我得到(在查询模型之后),一个“类别”的对象集。但是,我遇到了两个问题:
'AddObject'只接受EntityCollection,因此我需要重新创建一个集合然后将ObjectSet中的所有对象添加到entityCollection中,在这个过程中我需要将它与之前的模型分离并添加它到新的集合。如果没有,我会得到例外。
当我执行SaveChanges时,我看到我得到一个例外,它实际上是在尝试创建新类别而不是添加新的ProductCategory。我又错过了一些东西吗?
感谢。
答案 0 :(得分:0)
这听起来像是多对多的关系。在实体模型中,您不需要将连接表声明为单独的实体。而是将Products和Categories之间的关系配置为多对多,并添加有关连接表的元数据。在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和遍历表连接。