详述多对一关联映射

        多对一关联映射其实涉及到一个问题,即多对一和一对多,看似一样,但在Hibernate中却不同,它体现了关系的维护端在哪一方。下面分别看看这两种关联映射:

1、多对一关联映射(关系维护在User端)
             
        
          1 User
        <hibernate-mapping>
    <class name="com.tgb.hibernate.User" table="t_user">
        <id name="id">
            <generator class="native" />
        </id>
        <property name="name" />
        
        <!-- cascade="save-update"为级联,可以通过user的关联属性group读取group的属性值 -->
        <many-to-one name="class" column="classid" cascade="save-update" />
    </class>
  </hibernate-mapping>
     2Class
        <hibernate-mapping>
    <class name="com.tgb.hibernate.Class" table="t_class">
        <id name="id">
            <generator class="native" />
        </id>
        <property name="name" />
    </class>
</hibernate-mapping>
2、一对多关联映射(关系维护在Class端
              1 Student-class  映射关系(单向映射):
          istudent
                                <hibernate-mapping>
    <class name="com.tgb.hibernate.Student" table="t_student">
        <id name="id">
            <generator class="native" />
        </id>
        <property name="name" />
    </class>
  </hibernate-mapping>
                        ii Class
              <hibernate-mapping>
    <class name="com.tgb.hibernate.Classes" table="t_classes">
        <id name="id">
            <generator class="native" />
        </id>
        <property name="name" />
        
        <!-- inverse默认为false,表示可以维护关系,将其设置为true,则本端不维护关系,交给        另外一端即student维护关系 -->
        <set name="students" inverse="true">
            <key column="classesid" />
            <one-to-many class="com.tgb.hibernate.Student"/>
        </set>
    </class>
  </hibernate-mapping>
      2Student-class 映射关系(双向映射,就是在Student端加入Class的关联,其余的不变)
            <hibernate-mapping>
    <class name="com.tgb.hibernate.Student" table="t_student">
        <id name="id">
            <generator class="native" />
        </id>
        <property name="name" />
        <many-to-one name="classes" column="classesid" />
    </class>

</hibernate-mapping>


    总结:综上所述,其实不管一对多还是多对一,说的都是关系的维护端(关系在哪一端维护)。就好比最后的双向关联映射,通过设置两端,我即可以在一的一端加载多的一端,也可以在多的一端加载一的一端,只不过我们通常都会在一的一端设置 inverse="true",让关系维护在多的一端。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
以下是一个简单的示例代码,用于在 datagrid 中显示一个包含多个文件的字段: ```csharp // 定义一个包含文件路径的实体类 public class FileItem { public string FileName { get; set; } public string FilePath { get; set; } } // 定义一个包含多个文件的实体类 public class MultiFileItem { public int Id { get; set; } public List<FileItem> Files { get; set; } } // 在 datagrid 中显示多个文件的列 var col = new DataGridViewTextBoxColumn(); col.HeaderText = "Files"; col.Name = "Files"; col.ReadOnly = true; col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; datagrid.Columns.Add(col); // 将多个文件数据绑定到 datagrid 中 var data = new List<MultiFileItem>(); // 假设数据已经在 data 中 datagrid.DataSource = data; // 在 datagrid 的行加载时,将多个文件数据显示在 Files 列中 datagrid.RowPrePaint += (sender, e) => { if (e.RowIndex >= 0 && e.RowIndex < datagrid.Rows.Count) { var item = datagrid.Rows[e.RowIndex].DataBoundItem as MultiFileItem; if (item != null) { var files = item.Files.Select(f => $"{f.FileName} ({f.FilePath})"); datagrid.Rows[e.RowIndex].Cells["Files"].Value = string.Join(", ", files); } } }; ``` 在以上示例中,我们首先定义了一个包含文件路径的实体类和一个包含多个文件的实体类。然后,我们在 datagrid 中添加了一个“Files”列,并将多个文件数据绑定到 datagrid 中。最后,在 datagrid 的行加载时,我们将多个文件数据显示在“Files”列中。需要注意的是,以上示例代码只是一个简单的示例,实际情况下可能需要对代码进行更多的调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值