多对多,联接表上有额外的列

本文关键字: | 更新日期: 2023-09-27 18:34:51

嗨,我将如何设置此关系?我有一个多对多的实现,但现在有了新功能,我需要在连接表中添加一个额外的列。

为了简单起见,我有一个用户类,产品类

和用户产品类,今天看起来像这样。

产品.hbm.xml

<bag name="Users" table="users_products" inverse="true" cascade="save-update" >
  <cache usage="read-write" />
  <key column="ProductId" />
  <many-to-many class="User" column="UserId" outer-join="true" />
</bag>
<bag name="UserProduct" inverse="true" cascade="save-update">
    <cache usage="read-write" />
    <key column="ProductId" />
    <one-to-many class="UserProduct" />
</bag>

用户.hbm.xml

<bag name="Products" table="users_products" inverse="true" cascade="save-update" >
  <cache usage="read-write" />
  <key column="UserId" />
  <many-to-many class="Product" column="ProductId" />
</bag>
<bag name="UserProduct" inverse="true" cascade="save-update">
    <cache usage="read-write" />
    <key column="UserId" />
    <one-to-many class="UserProduct" />
</bag>

级联应该是什么样子的?现在,对于新功能,我创建了一个新类UserProduct:

private int _id;
private User _user;
private Product _product;
private string _ownComment;

并创建了UserProduct.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="" assembly="">
  <class name="UserProduct" table="users_products">
    <cache usage="read-write"/>
    <id name="Id" column="UsersWhiskiesId" type="Int32" length="4" unsaved-value="0">
      <generator class="native" />
    </id>
    <many-to-one name="User" class="User" column="UserId" not-null="true" />
    <many-to-one name="Product" class="Product" column="ProductId" not-null="true" />
    <property name="OwnComment" column="OwnComment" type="String" />
  </class>
</hibernate-mapping>

如果我之前使用过用户。产品添加(产品(;现在会是什么样子?我将如何映射用户和产品?如何更新切除记录?当我删除用户时,我想删除与产品的关联,而不是产品。

新问题:我有一个页面,注册用户可以在其中收集产品。在此页面上,我现在希望启用用户以隐藏某些产品。我填充了一个网格视图和一个带有复选框的模板字段。如何更新用户产品,其中有"隐藏产品"列。我在按钮中有此代码。

for (int i = 0; i < this.gvProducts.Rows.Count; i++)
        {
            GridViewRow row = this.gvProducts.Rows[i];
            bool isChecked = ((CheckBox)row.FindControl("chkSelect")).Checked;
            if (isChecked)
            {
                int productId= 
Convert.ToInt32(this.gvProducts.DataKeys[row.RowIndex].Value);
    UserProduct up= new UserProduct();
    up.User = this._user;
                up.Product= DataManagement.CoreRepository.GetObjectById<Product>(productId);
                up.HideProduct = isChecked;
                DataManagement.CoreRepository.UpdateObject(up);

感谢您的帮助!

多对多,联接表上有额外的列

您需要将多对多关系拆分为两个多对一关系,就像在数据库中一样。

因此,一个用户具有多个用户产品项

,一个产品具有多个用户产品项。用户产品有一个用户和一个产品。

相关文章:
  • 没有找到相关文章