您的位置:首页 > 其它

Hibernate 一对多连接表双向关联

2012-12-05 08:12 344 查看
[align=left]一、模型介绍[/align]
[align=left] [/align]
[align=left]一个人(Person)对应多个地址(Address)。[/align]
[align=left] [/align]
[align=left]二、实体(省略getter、setter方法)[/align]
[align=left][/align]
[align=left]public class Person1ntab_sx {[/align]
[align=left] private int personid;[/align]
[align=left] private String name;[/align]
[align=left] private int age;[/align]
[align=left] private Set addresses=new HashSet();[/align]
[align=left] [/align]
[align=left]public class Address1ntab_sx {[/align]
[align=left] private int addressid;[/align]
[align=left] private String addressdetail;[/align]
[align=left] private Person1ntab_sx person1ntab_sx;[/align]
[align=left][/align]
[align=left]三、表模型[/align]
[align=left] [/align]
[align=left]mysql> desc person_1ntab_sx;[/align]
[align=left]+----------+--------------+------+-----+---------+----------------+[/align]
[align=left]| Field | Type | Null | Key | Default | Extra |[/align]
[align=left]+----------+--------------+------+-----+---------+----------------+[/align]
[align=left]| personid | int(11) | NO | PRI | NULL | auto_increment |[/align]
[align=left]| name | varchar(255) | YES | | NULL | |[/align]
[align=left]| age | int(11) | YES | | NULL | |[/align]
[align=left]+----------+--------------+------+-----+---------+----------------+[/align]
[align=left] [/align]
[align=left]mysql> desc address_1ntab_sx;[/align]
[align=left]+---------------+--------------+------+-----+---------+----------------+[/align]
[align=left]| Field | Type | Null | Key | Default | Extra |[/align]
[align=left]+---------------+--------------+------+-----+---------+----------------+[/align]
[align=left]| addressid | int(11) | NO | PRI | NULL | auto_increment |[/align]
[align=left]| addressdetail | varchar(255) | YES | | NULL | |[/align]
[align=left]+---------------+--------------+------+-----+---------+----------------+[/align]
[align=left] [/align]
[align=left]mysql> desc join_1ntab_sx;[/align]
[align=left]+-----------+---------+------+-----+---------+-------+[/align]
[align=left]| Field | Type | Null | Key | Default | Extra |[/align]
[align=left]+-----------+---------+------+-----+---------+-------+[/align]
[align=left]| addressid | int(11) | NO | PRI | | |[/align]
[align=left]| personid | int(11) | NO | PRI | | |[/align]
[align=left]+-----------+---------+------+-----+---------+-------+[/align]
[align=left] [/align]
[align=left]四、生成的SQL脚本[/align]
[align=left] [/align]
[align=left]/* Formatted on 2007/08/22 17:52 (QP5 v5.50) */[/align]
[align=left]CREATE TABLE `address_1ntab_sx` ([/align]
[align=left] `addressid` int(11) NOT NULL auto_increment,[/align]
[align=left] `addressdetail` varchar(255) default NULL,[/align]
[align=left] PRIMARY KEY (`addressid`)[/align]
[align=left]) ENGINE=InnoDB DEFAULT CHARSET=gbk;[/align]
[align=left] [/align]
[align=left]/* Formatted on 2007/08/22 17:52 (QP5 v5.50) */[/align]
[align=left]CREATE TABLE `person_1ntab_sx` ([/align]
[align=left] `personid` int(11) NOT NULL auto_increment,[/align]
[align=left] `name` varchar(255) default NULL,[/align]
[align=left] `age` int(11) default NULL,[/align]
[align=left] PRIMARY KEY (`personid`)[/align]
[align=left]) ENGINE=InnoDB DEFAULT CHARSET=gbk;[/align]
[align=left] [/align]
[align=left]/* Formatted on 2007/08/22 17:52 (QP5 v5.50) */[/align]
[align=left]CREATE TABLE `join_1ntab_sx` ([/align]
[align=left] `addressid` int(11) NOT NULL,[/align]
[align=left] `personid` int(11) NOT NULL,[/align]
[align=left] PRIMARY KEY (`personid`,`addressid`),[/align]
[align=left] KEY `FK869F8F0F8F0F8F61F93DDD6` FOREIGN KEY (`personid`) REFERENCES `person_1ntab_sx` (`personid`)[/align]
[align=left]) ENGINE=InnoDB DEFAULT CHARSET=gbk;[/align]
[align=left] [/align]
[align=left]五、映射方法[/align]
[align=left][/align]
[align=left]<hibernate-mapping>[/align]
[align=left] <class name="com.lavasoft.sx._1_n_tab.Person1ntab_sx" table="PERSON_1ntab_sx">[/align]
[align=left] <id name="personid">[/align]
[align=left] <generator class="identity"/>[/align]
[align=left] </id>[/align]
[align=left] <property name="name"/>[/align]
[align=left] <property name="age"/>[/align]
[align=left] <!--映射集合属性,关联到持久化类-->[/align]
[align=left] <!--table="join_1ntab_sx"指定了连接表的名字-->[/align]
[align=left] <set name="addresses"[/align]
[align=left] table="join_1ntab_sx"[/align]
[align=left] cascade="all">[/align]
[align=left] <!--column="personid"指定连接表中关联当前实体类的列名-->[/align]
[align=left] <key column="personid" not-null="true"/>[/align]
[align=left] <!--unique="true"表示当前实体类是"1",不是"n"-->[/align]
[align=left] <many-to-many column="addressid"[/align]
[align=left] unique="true"[/align]
[align=left] class="com.lavasoft.sx._1_n_tab.Address1ntab_sx"/>[/align]
[align=left] </set>[/align]
[align=left] </class>[/align]
[align=left]</hibernate-mapping>[/align]
[align=left] [/align]
[align=left]<hibernate-mapping>[/align]
[align=left] <class name="com.lavasoft.sx._1_n_tab.Address1ntab_sx"[/align]
[align=left] table="ADDRESS_1ntab_sx">[/align]
[align=left] <id name="addressid">[/align]
[align=left] <generator class="identity"/>[/align]
[align=left] </id>[/align]
[align=left] <property name="addressdetail"/>[/align]
[align=left] <!--映射关联属性,column属性指定外键列名-->[/align]
[align=left] <join table="join_1ntab_sx"[/align]
[align=left] inverse="true"[/align]
[align=left] optional="true">[/align]
[align=left] <key column="addressid"/>[/align]
[align=left] <many-to-one name="person1ntab_sx"[/align]
[align=left] column="personid"[/align]
[align=left] cascade="all"[/align]
[align=left] not-null="true"/>[/align]
[align=left] </join>[/align]
[align=left] </class>[/align]
[align=left]</hibernate-mapping>[/align]
[align=left] [/align]
[align=left]六、测试方法[/align]
[align=left] [/align]
[align=left]public class Test_1ntab_sx {[/align]
[align=left] public static void main(String[] args){[/align]
[align=left] Address1ntab_sx add1=new Address1ntab_sx();[/align]
[align=left] Address1ntab_sx add2=new Address1ntab_sx();[/align]
[align=left] Person1ntab_sx p=new Person1ntab_sx();[/align]
[align=left] [/align]
[align=left] add1.setAddressdetail("郑州市经三路");[/align]
[align=left] add2.setAddressdetail("合肥市宿州路");[/align]
[align=left] p.setName("wang");[/align]
[align=left] p.setAge(30);[/align]
[align=left] [/align]
[align=left] p.getAddresses().add(add1);[/align]
[align=left] p.getAddresses().add(add2);[/align]
[align=left] add1.setPerson1ntab_sx(p);[/align]
[align=left] add2.setPerson1ntab_sx(p);[/align]
[align=left] [/align]
[align=left] Session session= HibernateUtil.getCurrentSession();[/align]
[align=left] Transaction tx=session.beginTransaction();[/align]
[align=left]// session.save(p);[/align]
[align=left] session.saveOrUpdate(add1);[/align]
[align=left] session.saveOrUpdate(add2);[/align]
[align=left] tx.commit();[/align]
[align=left] HibernateUtil.closeSession();[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left]七、测试结果[/align]
[align=left] [/align]
[align=left]1) :正常保存.[/align]
[align=left]// session.save(p);[/align]
[align=left] session.saveOrUpdate(add1);[/align]
[align=left] session.saveOrUpdate(add2);[/align]
[align=left] [/align]
[align=left]Hibernate: insert into PERSON_1ntab_sx (name, age) values (?, ?)[/align]
[align=left]Hibernate: insert into ADDRESS_1ntab_sx (addressdetail) values (?)[/align]
[align=left]Hibernate: insert into ADDRESS_1ntab_sx (addressdetail) values (?)[/align]
[align=left]Hibernate: insert into join_1ntab_sx (personid, addressid) values (?, ?)[/align]
[align=left]Hibernate: insert into join_1ntab_sx (personid, addressid) values (?, ?)[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: