关于有序集合和多对多中inverse的用法

 

  •  一对多维护关联关系是更新外键,多对多维护关联关系是在中间表中插入记录。
  •  inverse 不能出现在list,inverse属性只会在集合中有,一般的字段没有该属性。
  • cascade 是在所有的关联关系中都会有。

 ——————————————在多对多的关联映射中————————————————————————————————————————————————

Student: id(Integer),name(String),teachers(Set<Teacher>);

Teacher:id(Integer),name(String),students(Set<Student>);

Student.hbm.xml:

<set name="teachers" table="student_teacher">

<key column="student_Id"/>

<many-to-many class="Teacher" column="teacher_Id"/>

</set>

Teacher.hbm.xml:

<set name="students" table="student_teacher">

<key column="teacher_Id"/>

<many-to-many class="Student" column="student_Id"/>

</set>

多对多的存储:

Teacher t1=new Teacher( );

t1.setName("t1");

Teacher t2=new Teacher( );

t2.setName("t2");

Student s1=new Student( );

s1.setName("s1");

Student s2=new Student( );

s2.setName("s2");

Set<Studnet> students=new HashSet<Student>( );

students.add(s1);

students.add(s2);

Set<Teacher> teachers=new HashSet<Teacher>( );

teachers.add(t1);

teachers.add(t2);

s1.setTeachers(teachers);

s2.setTeachers(teachers);

t1.setStudnets(studnets);

t2.setStudents(students);

save(t1);

save(s1);

在默认情况下,<set>映射中的inverse属性是false,在这里老师和学生都没有放弃维护关联关系的权利,多对多和多对一不同,两端都要维护关系,都将在中间表中插入记录,将报主键重复错误。解决办法,在某一端设置inverse="true",不在关系模型上维护关系,比如将Teacher.hbm.xml 里面的setinverse属性设置为true,尽管让可以在对象模型上建立从老师到学生的关联关系,但此时在中间表中将只插入一条数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值