映射一对多关联关系
掌握以下知识点:
1. 映射单个自然主键
2. 映射复合自然主键
3. 映射多对一单向关联关系。
4. 映射一对多双向关联关系。
映射单个自然主键: 由程序指定主键的值 .
<id name="empid" type="integer">
<column name="empid" />
<generator class="assigned" />
</id>
映射复合自然主键: 如果在一个表中没有定义 ID 代理主键,而是有两个或者两个以上的字段作为复合主键.
<composite-id name="id" class="com.test.pojo.WorksId">
<key-property name="workid" type="integer">
<column name="workid" />
</key-property>
<key-property name="workname" type="string">
<column name="workname" length="50" />
</key-property>
</composite-id>
插入复合主键:
Works work = new Works();
WorksId worksId = new WorksId(new Integer(1),"服务员");
work.setId(worksId);
work.setWorkdesc("work description");
session.save(work);
查询复合主键:
WorksId worksId = new WorksId(new Integer(1),"服务员");
Works work = (Works)session.load(Works.class, worksId);
以下示例演示了 Adds 类和 person 类为 多对一关系:
Adds.hbm.xml:
<many-to-one name="person" column="personId" class="com.test.pojo.Person" />
以下代码演示了多对一级联删除:
Adds adds = (Adds)
session.load(Adds.class, new Integer(23));
session.delete(adds);
Cascade = “save-update” 级联保存或更新与它关联的对象
Cascade = “delete” 级联删除对象
Cascade = ”all” 级联保存,更新, 删除 与它关联的对象
以下代码演示了 person 类和 Adds 类为一对多关系:
Person.hbm.xml
<set name="adds" cascade="all" inverse="true" >
<key column="personId" not-null="true"/>
<one-to-many class="com.test.pojo.Adds"/>
</set>
在 many 方把inverse=”true” 可以提高应用程序的性能.
以下代码演示了person 对象 和 Adds 对象 一对多双向关联:
Person person = new Person("wawa, "wawa@sddif.com","23429435", new HashSet());
Adds adds = new Adds();
adds.setAddName("bei jin");
person.getAdds().add(adds);
adds.setPerson(person);
session.save(person);
以下代码演示了级联删除:
Person person = (Person)
session.load(Person.class, new Integer(10));
session.delete(person);
以下示例演示了 Cascade = “all-delete-orphan” 用于解除父子对象之间的关系
演示 Person 对象 和 Adds 对象做为父子关系
Person.hbm.xml:
<set name="adds" cascade="all-delete-orphan">
<key column="personId"/>
<one-to-many class="com.test.pojo.Adds"/>
</set>
Person person = (Person)session.load(Person.class, new Integer(32));
Adds adds = (Adds)person.getAdds().iterator().next();
person.getAdds().remove(adds);
adds.setPerson(null);
当 <set> 元素 的 cascade 属性 取值为”all-delete-orphan”, Hibernate 会按以下方式处理 Person 对象:
1. 当保存对象时 ,相当于 cascade 属性为 “save-update”
2. 当删除对象时, 相当于 cascade 属性为 “delete”
3. 删除相关联的对象.
以下代码演示了 Person 对象和 Company 对象是 一对一关系:
Person.hbm.xml
<one-to-one name="company" class="com.test.pojo.Company" cascade="all"/>
Company.hbm.xml
<id name="companyid" type="java.lang.Integer">
<column name="companyid" />
<generator class="foreign">
<param name="property">person</param>
</generator>
</id>
<one-to-one name="person" class="com.test.pojo.Person" constrained="true"/>