1)不管是一般的集合,还是一对多、多对多关系,都要使用到set,区别只是前者set中为一般类型,后者为对象。
具体写法:
一般类型
<set name="addressSet" table="user_address_set">
<key column="userId"/>
<element type="string" column="address"/>
</set> 一对多映射
<set name="employees" table="t_employees">
<key column="departmentId"/>
<one-to-many class="cn.com.cpf.pojo.Employee"/>
</set> <many-to-one name="department" class="cn.com.cpf.pojo.Department" column="departmentId"></many-to-one> 多对多映射
<set name="students" table="teacher_student" inverse="true">
<key column="teacherId"/>
<many-to-many class="cn.com.cpf.pojo.Student" column="studentId"/>
</set> <set name="teachers" table="teacher_student">
<key column="studentId"/>
<many-to-many class="cn.com.cpf.pojo.Teacher" column="teacherId"/>
</set> 说明:
1>所有的key指的都是中间表中映射本表主键的那个列
2>所有的name指的都是本类中的属性名称
3>如果set中元素为一般类型,那么set中使用element元素,指定类型和对应的中间表的列
4>如果set中元素为类,那么set中根据情况使用one-to-many或many-to-many,使用class指定类型
2) inverse属性
1> 在一对多关系中,inverse表示是否自己来设置多的那张表中的外键值
2> 在多对多关系中,inverse表示是否自己来往中间表中插入数据
3> inverse讨论的只是外键的操作,cascade讨论的是关联对象操作时候的关系
3) 单向关系
单向一对多
单向多对一
单向多对多
一对一
对于单向关系,只能从维护外键的那一方进行解除关系和删除操作
4) 操作总结
1> 保存
不管何种关联关系,有没有关系,都直接save即可
注意:建议先保存没有外键的一方,这样就可以先生成id,那么有外键的一方保存的时候就可以直接保存,而不用update了
2 > 解除关联关系
实质也就是设置关联的另一方为null
注意:只有维护关联关系,且不是主键关联的才能解除
3> 删除对象
从维护关系的一方删除肯定不会有问题,因为外键就在这里,直接删即可
从没有外键的一方删除会有问题,因为已经被另一方引用了主键
本文深入探讨了对象关系映射(ORM)中集合的使用方法,包括一般类型、对象类型的集合定义,以及一对多、多对多关系的映射规则。详细解释了关键属性如inverse的作用,提供了单向关系的操作总结,并强调了不同场景下的对象保存、解除关联及删除策略。
1324

被折叠的 条评论
为什么被折叠?



