在使用Hibernate时,加入级联操作可以大大减少数据库代码的编程码量,如果使用得当对数据库效能的提高有不少的帮助。
先讲讲怎样进行级联操作。
1、有两张表Tuser和Tuserinfo
其中Tuserinfo中userid主键关联Tuser。
TUser.hbm.xml
<hibernate-mapping>
<class
name="org.hibernate.sample.TUser"
table="t_user"
dynamic-update="true"
dynamic-insert="true"
>……
<set
name="addresses"
table="t_address"
inverse="true"//方向控制
cascade="all"//进行所有的级联操作包括增加、删除、修改
>
<key
column="user_id"
>
</key>
<one-to-many
class="org.hibernate.sample.TAddress"
/>
</set>
</class>
</hibernate-mapping>
>
TAddress.hbm.xml
<hibernate-mapping>
<class
name="org.hibernate.sample.TAddress"
table="t_address"
dynamic-update="false"
dynamic-insert="false"
>……
<many-to-one
name="user"
class="org.hibernate.sample.TUser"
cascade="none"
column="user_id"
/>
</class>
</hibernate-mapping>
Tuser.java
public class TUser implements Serializable {
……
private Set addresses = new HashSet();
public Set getAddresses() {
return addresses;
}
……
TAddress.java
public class TAddress implements Serializable {
……
private TUser user;
……
public TUser getUser() {
return this.user;
}
……
}
2、向user中插入一个地址
TAddress addr = new TAddress();
addr.setTel("1123");
addr.setZipcode("233123");
addr.setAddress("Hongkong");
addr.setUser(user);//设置关联的TUser对象
user.getAddresses().add(addr);
session.save(user);//级联更新
3、当删除user时,也同时删除了相关的address