北大青鸟深圳嘉华学校分享Hibernate关联映射

关联映射:
1.关于n:1 使用emp和dept进行举例
单项多对一:
emp:
entity:+private Dept dept;
hbm.xml:+
dept无需修改

	双向一对多:
	emp:
	entity:+private Dept dept;
	hbm.xml:+<many-to-one name="dept" column="deptno" class="com.entity.Dept" cascade="save-update" />
	dept:
	entity:+private List<Emp> emps;
	hbm.xml:+<bag name="emps" inverse="true" cascade="all">
            	<key>
                	<column name="DEPTNO" precision="2" scale="0" />
            	</key>
            	<one-to-many class="com.entity.Emp" />
        	</bag>
	关于inverse和cascade的设置
	inverse:反转  默认inverse="false"表示主动方  一般将多方设置为主动方
	cascade:级联  none save-update delete all 一般对一方设置级联
2.多对多:使用Student表和Course表  中间需要一个StuCourse学生课程表
	单向多对多:
	Student:
	entity:+private List<Course> courses = new ArrayList<Course>();
	hbm.xml:
	<bag name="courses" table="STUCOURSE" inverse="false" cascade="save-update">
	           <key>
	               <column name="STUNO" precision="4" scale="0" />
	           </key>
	           <many-to-many class="com.manytomany.entity.Course" >
	           	<column name="COURSEID" precision="4" scale="0" />
	           </many-to-many>
        	</bag>
	Course:无需修改
	注意事项:关系表中只保存两列外键,设置inverse="false",在设置级联时需要设置cascade="save-update"
	双向多对多:
	Student:
	entity:+private List<Course> courses = new ArrayList<Course>();
	hbm.xml:
	<bag name="courses" table="STUCOURSE" inverse="false" cascade="save-update">
	           <key>
	               <column name="STUNO" precision="4" scale="0" />
	           </key>
	           <many-to-many class="com.manytomany.entity.Course" >
	           	<column name="COURSEID" precision="4" scale="0" />
	           </many-to-many>
        	</bag>
	Course:
	entity:+private List<Student> students = new ArrayList<Student>();
	hbm.xml:
	<bag name="students" table="STUCOURSE" inverse="false" cascade="save-update">
	           <key>
	               <column name="COURSEID" precision="4" scale="0" />
	           </key>
	           <many-to-many class="com.manytomany02.entity.Student" >
	           	<column name="STUNO" precision="4" scale="0" />
	           </many-to-many>
	       </bag>
	注意事项:关系表中只保存两列外键,设置inverse="false",在设置级联时需要设置cascade="save-update"
3.一对一:Employee员工表和Passport员工信息表
	主键关联:
	Employee:
	entity:+private Passport passport;
	hbm.xml:
	<one-to-one name="passport"  class="com.entity.Passport" cascade="all" />
	Passport:
	entity:+private Employee employee;
	hbm.xml:
	<generator class="foreign" >
	<param name="property">employee</param>
	</generator>
	<one-to-one name="employee" class="com.entity.Employee" />
	注意事项:主键生成策略选择foreign
	唯一外键:
	Employee:
	entity:+private Passport passport;
	hbm.xml:
	<one-to-one name="passport" class="com.entity.Passport" property-ref="employee"  cascade="all" />
	Passport:
	entity:+private Employee employee;
	hbm.xml:
	<many-to-one name="employee" column="empno" class="com.entity.Employee" unique="true">
	注意事项:property-ref 指定关联类的属性名,这个属性将会和本类的主键相对应。如果没有指定,会使用对方关联类的主键。

更多干货获取,请记得关注我哟!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值