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] |
相关文章推荐
- Hibernate 一对多连接表双向关联
- Hibernate 一对多连接表双向关联
- Hibernate 一对多连接表双向关联
- Hibernate关联之 一对多连接表双向关联
- hibernate 关联映射 双向多对一(一对多)
- Hibernate 一对一连接表双向关联
- Hibernate关系映射(五)一对多、多对一双向关联@OneToMany @OneToMany Annotation方式
- Hibernate关系映射级别注解(一对多单向外键关联、一对多(多对一)双向外键关联)
- Hibernate在关于一对多,多对一双向关联映射
- Hibernate 一对多连接表单向关联
- hibernate映射一对多,双向关系[关联自身],初学例子四
- Hibernate关联关系总结一对多、多对一双向关联,多对多
- 07-hibernate注解-一对多(多对一)双向外键关联
- hibernate 关联映射:多对一(一对多)双向关联关系
- hibernate一对多/多对一双向关联_XML
- hibernate双向关联(一对多,多对一)
- Hibernate 一对一连接表双向关联
- Hibernate关联之 一对一连接表双向关联
- hibernate映射关系 一对多、多对一单向关联 一对多双向关联
- hibernate双向多对一(一对多)及自身一对多关联