新人刚学这个,只是做个记录,写的不好请大家多多包含。
/**
* 一对一:共享主键 Student(学生表) Record(档案)
*
* 配置文件:Student.hbm.xml(学生表)
* <one-to-one name="record" class="hibernate.vo.Record"
* outer-join="true" cascade="delete"></one-to-one>
*
* name: 这个属性是档案的的vo
* class: 指定name中的vo 是谁的(那个类)
* outer-join: 这个是让主表能用外连接。
* cascade: 级联删除 删除学生的时候就删除 档案
*
* 配置文件:Record(档案表)
* <one-to-one name="student" class="Student" constrained="true"></one-to-one>
* <generator class="foreign">
* <param name="property">student</param>
* </generator>
* name:对方的vo
* class: class: 指定name中的vo 是谁的(那个类)
* constrained: 这个属性是约束的意思,表示自己的约束必须和对方的标示符一致
* generator 这个标签设置的是在id中设置 表示自己的主键 生成是根据对方的主键 (student)
*
*
*
*
*
* 在现实中的需求一般是 添加档案的时候是 添加档案的时候 同时添加 学生
* 在程序中这个是一对一的 的关系映射 需要在 Record 添加一个属性 cascade="save-update" 这个就
* 代表 你添加的时候 级联添加! 同时你也要在程序中去关联学生 就是在vo中要设置 这个档案是给那个学生
* 如果不关联 就会出现以下的异常
*
* org.hibernate.PropertyValueException:
* not-null property references
* a null or transient value: hibernate.vo.Record.student
* 注意:在关联的时候 一定要 档案去关联学生。
* 如果是学生关联了档案! 也会抛出以上的异常
*
* 如果想添加学生的时候 同时添加档案:
* 那就需要在学生这边设置级联 保存和更新 cascade="save-update"
* 这个地方需要注意的是: 如果你想添加学生的时候也要添加档案的话, 那必要要关联双方。不然会出现以下异常:
* not-null property references a
* null or transient value: hibernate.vo.Record.student
* (这个异常的意思是 :无效的属性引用)
*
* 在学生那边建议就设置一个删除的级联。 因为 表面上 显示的是 一对一,
* 但是实际他们的关系还是有一个主导者 这样删除的时候会级联删除学生的档案!
* 同时在设置级联更新和添加的时候还是放在 档案表这边!
*
*
* 唯一外键:
* 只需要改变配置文件 student(学生表) Record(档案表)
*
* <many-to-one name="student" class="Student" unique="true" cascade="save-update">
* <column name="student_id"></column>
* </many-to-one>
* unique :保证外键的唯一性和对方主键的值一致
*
* <one-to-one name="record" class="hibernate.vo.Record"
* cascade="delete" property-ref="student"></one-to-one>
* property: 这个是因为唯一外键关联映射中两个实体采用record 表中的student_id 外键维护关联关系
*
*
*
*
*/