Hibernate 一对多连接表双向关联
2017-02-08 17:56
288 查看
[align=left]Hibernate 一对多连接表双向关联[/align]
[align=left] [/align] |
[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 `FK8F869F61F93DDD6` (`personid`),[/align] |
[align=left] KEY `FK8F869F61FC0F682A` (`addressid`),[/align] |
[align=left] CONSTRAINT `FK8F869F61FC0F682A` FOREIGN KEY (`addressid`) REFERENCES `address_1ntab_sx` (`addressid`),[/align] |
[align=left] CONSTRAINT `FK8F869F61F93DDD6` 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 一对多连接表双向关联
- Java的Hibernate框架中一对多的单向和双向关联映射
- Hibernate关联映射 --- 一对多实例分析(双向关联)
- Hibernate 一对多连接表单向关联
- Hibernate 一对多连接表单向关联
- hibernate映射一对多,双向关系[关联自身],初学例子四
- Hibernate关联关系总结一对多、多对一双向关联,多对多
- Hibernate_一对多_多对一_双向关联
- Hibernate 一对一连接表双向关联
- Hibernate 一对一连接表双向关联
- Hibernate关联映射(单项多对一和一对多、双向一对多)
- hibernate--一对多 多对一 双向关联 (重点!!!)
- Hibernate中的延迟加载、实体关联单向一对多及双向一对多实体关联
- Hibernate关系映射(五)一对多、多对一双向关联@OneToMany @OneToMany Annotation方式
- hibernate 关联映射:多对一(一对多)双向关联关系
- hibernate一对多/多对一双向关联_XML
- 【hibernate】一对多(客户与订单双向关联)遇到的异常