Hibernate 多对一连接表单向关联
2017-02-08 17:45
459 查看
[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 Personn1tab {[/align] |
[align=left] private int personid;[/align] |
[align=left] private String name;[/align] |
[align=left] private int age;[/align] |
[align=left] private Addressn1tab addressn1tab;[/align] |
[align=left] [/align] |
[align=left]public class Addressn1tab {[/align] |
[align=left] private int addressid;[/align] |
[align=left] private String addressdetail;[/align] |
[align=left] [/align] |
[align=left]三、表模型[/align] |
[align=left] [/align] |
[align=left]mysql> desc address_n1tab;[/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_n1tab;[/align] |
[align=left]+------------+---------+------+-----+---------+-------+[/align] |
[align=left]| Field | Type | Null | Key | Default | Extra |[/align] |
[align=left]+------------+---------+------+-----+---------+-------+[/align] |
[align=left]| personid | int(11) | NO | PRI | | |[/align] |
[align=left]| addressn1tab | int(11) | YES | MUL | NULL | |[/align] |
[align=left]+------------+---------+------+-----+---------+-------+[/align] |
[align=left] [/align] |
[align=left]mysql> desc person_n1tab;[/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]四、生成的SQL脚本[/align] |
[align=left] [/align] |
[align=left]CREATE TABLE `address_n1tab` ([/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 AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;[/align] |
[align=left] [/align] |
[align=left]CREATE TABLE `join_n1tab` ([/align] |
[align=left] `personid` int(11) NOT NULL,[/align] |
[align=left] `address11fk` int(11) default NULL,[/align] |
[align=left] PRIMARY KEY (`personid`),[/align] |
[align=left] KEY `FKAC780AAADAE3A82C` (`personid`),[/align] |
[align=left] KEY `FKAC780AAAC6242A64` (`address11fk`),[/align] |
[align=left] CONSTRAINT `FKAC780AAAC6242A64` FOREIGN KEY (`address11fk`) REFERENCES `address_n1tab` (`addressid`),[/align] |
[align=left] CONSTRAINT `FKAC780AAADAE3A82C` FOREIGN KEY (`personid`) REFERENCES `person_n1tab` (`personid`)[/align] |
[align=left]) ENGINE=InnoDB DEFAULT CHARSET=gbk;[/align] |
[align=left] [/align] |
[align=left]CREATE TABLE `person_n1tab` ([/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 AUTO_INCREMENT=3 DEFAULT CHARSET=gbk;[/align] |
[align=left] [/align] |
[align=left] [/align] |
[align=left]五、映射方法[/align] |
[align=left] [/align] |
[align=left]<hibernate-mapping>[/align] |
[align=left] <class name="com.lavasoft.dx._n_1_tab.Personn1tab" table="PERSON_n1tab">[/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] <!--使用join元素显式确定链接表-->[/align] |
[align=left] <join table="join_n1tab">[/align] |
[align=left] <!--映射关联所用的外键-->[/align] |
[align=left] <key column="personid"/>[/align] |
[align=left] <many-to-one name="addressn1tab"/>[/align] |
[align=left] </join>[/align] |
[align=left] </class>[/align] |
[align=left]</hibernate-mapping>[/align] |
[align=left] [/align] |
[align=left]<hibernate-mapping>[/align] |
[align=left] <class name="com.lavasoft.dx._n_1_tab.Addressn1tab" table="ADDRESS_n1tab">[/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] </class>[/align] |
[align=left]</hibernate-mapping>[/align] |
[align=left] [/align] |
[align=left] [/align] |
[align=left]六、测试方法[/align] |
[align=left] [/align] |
[align=left]public class Test_n1tab {[/align] |
[align=left] public static void main(String[] args){[/align] |
[align=left] Personn1tab p1=new Personn1tab();[/align] |
[align=left] Personn1tab p2=new Personn1tab();[/align] |
[align=left] [/align] |
[align=left] p1.setAge(21);[/align] |
[align=left] p1.setName("p1");[/align] |
[align=left] [/align] |
[align=left] p2.setAge(23);[/align] |
[align=left] p2.setName("p2");[/align] |
[align=left] [/align] |
[align=left] Addressn1tab add=new Addressn1tab();[/align] |
[align=left] add.setAddressdetail("郑州市经三路");[/align] |
[align=left] [/align] |
[align=left] p1.setAddressn1tab(add);[/align] |
[align=left] p2.setAddressn1tab(add);[/align] |
[align=left] [/align] |
[align=left] Session session=HibernateUtil.getCurrentSession();[/align] |
[align=left] Transaction tx=session.beginTransaction();[/align] |
[align=left] session.save(add);[/align] |
[align=left] session.save(p1);[/align] |
[align=left] session.save(p2);[/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] [/align] |
[align=left] session.save(p1);[/align] |
[align=left] session.save(p2);[/align] |
[align=left] [/align] |
[align=left]Hibernate: insert into ADDRESS_n1tab (addressdetail) values (?)[/align] |
[align=left]Hibernate: insert into PERSON_n1tab (name, age) values (?, ?)[/align] |
[align=left]Hibernate: insert into join_n1tab (address11fk, personid) values (?, ?)[/align] |
[align=left]Hibernate: insert into PERSON_n1tab (name, age) values (?, ?)[/align] |
[align=left]Hibernate: insert into join_n1tab (address11fk, personid) values (?, ?)[/align] |
[align=left] [/align] |
[align=left]2) :正常保存.[/align] |
[align=left] session.save(p1);[/align] |
[align=left] session.save(p2);[/align] |
[align=left] session.save(add);[/align] |
[align=left] [/align] |
[align=left] Hibernate: insert into PERSON_n1tab (name, age) values (?, ?)[/align] |
[align=left] Hibernate: insert into join_n1tab (address11fk, personid) values (?, ?)[/align] |
[align=left] Hibernate: insert into PERSON_n1tab (name, age) values (?, ?)[/align] |
[align=left] Hibernate: insert into join_n1tab (address11fk, personid) values (?, ?)[/align] |
[align=left] [/align] |
相关文章推荐
- zookeeper 启动命令
- jmeter进行分布式测试_使用其他机器进行测试
- 程序或-内存区域分配(五个段)
- 百度地图定位6.0动态权限问题
- springboot(八):RabbitMQ详解
- JAVA(2017-02-08)
- 蓝牙低功耗(BLE)
- ansible使用中遇到的问题
- pod出现include of non-modular header inside framework module 错误
- 石家庄路由器安装wifi无线信号放大器无线蹭网器安装
- 手把手教你写一个归并排序
- Hibernate 多对一外键单向关联
- [置顶] 微信小程序开发(二):获取微信小程序页面带参二维码全流程
- 国密SKF接口函数介绍之二:访问控制函数
- Java无需解压直接读取Zip文件和文件内容
- Android PopupWindow背景半透明兼容方案
- Hibernate 一对多连接表单向关联
- 26.图文混排
- WCF异常处理
- Linux 系统安装配置PHP服务(源码安装)