hibernate对映射xml的一对多的双向关联详解
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="cn.secn.com.model.StuIdCard"><id name="id"><generator inverse是反转的意思;意思就说。在一对多的一方将表之间的关联关系交给对方去管理;并且给结方一个Key 重新命名字段的名称stuid;这里要和对方的维护字段名一致 cascade="delete" :删除时级联删除子类的数据--><set name="student" inverse="true" cascade="delete"> <key><column name="stuid" /></key><one-to-many name="code"><?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="cn.secn.com.model.Student" dynamic-update="true"><id name="id"><generator /><property name="sex" /><property name="good" type="integer"></property><!-- cascade="all"级联,当然以student为添加对象时,同时也会级联把studIdCard添加上 --><!-- lazy="false" lazy:懒惰的意思;当懒惰时就不会把想studIdCard也发一个sql语句;默认是true;意思就是懒惰的 --><!-- fetch="join" 把二个表通过join的方式连接到一起在这里lazy="false" fetch="join" 可以选择一个来使用:lazy="false" 不懒惰的;就把二个关联表的信息读取出来;select * from A;select * from B;二个表是分开的fetch="join" 是把二张表关联起来读取出来:select a.* ,b.* from A a left outer join B b a.id=b.aid where a.id=?cascade属性:all : 所有情况下均进行关联操作。none:所有情况下均不进行关联操作。这是默认值。save-update:在执行save/update/saveOrUpdate时进行关联操作。delete:在执行delete时进行关联操作。 --><many-to-one name="student" column="stuid" cascade="save-update" fetch="join" ></many-to-one> </class></hibernate-mapping>
?
下面是源代码;自己加上hibernate和Junit的Jar包就可以调试;
不懂的可以留言交流.
?