Hibernate 一对一连接表双向关联
来源:互联网 发布:简述sql的特点 编辑:程序博客网 时间:2024/05/14 20:36
Hibernate一对一连接表双向关联
一、模型介绍
一个人(Person)对应一个地址(Address)。
二、实体(省略getter、setter方法)
public class Person11tab_sx {
private int personid;
private String name;
private int age;
private Address11tab_sx address11tab_sx;
public class Address11tab_sx {
private int addressid;
private String addressdetail;
private Person11tab_sx person11tab_sx;
三、表模型
mysql> desc person_11tab_sx;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| personid | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+----------+--------------+------+-----+---------+----------------+
mysql> desc join_11tab_sx;
+-----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| addressid | int(11) | NO | UNI | | |
| personid | int(11) | NO | PRI | | |
+-----------+---------+------+-----+---------+-------+
mysql> desc address_11tab_sx;
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| addressid | int(11) | NO | PRI | NULL | auto_increment |
| addressdetail | varchar(255) | YES | | NULL | |
+---------------+--------------+------+-----+---------+----------------+
四、生成的SQL脚本
/* Formatted on 2007/08/22 17:35 (QP5 v5.50) */
CREATE TABLE `person_11tab_sx` (
`personid` int(11) NOT NULL auto_increment,
`name` varchar(255) default NULL,
`age` int(11) default NULL,
PRIMARY KEY (`personid`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/* Formatted on 2007/08/22 17:34 (QP5 v5.50) */
CREATE TABLE `address_11tab_sx` (
`addressid` int(11) NOT NULL auto_increment,
`addressdetail` varchar(255) default NULL,
PRIMARY KEY (`addressid`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/* Formatted on 2007/08/22 18:35 (QP5 v5.50) */
CREATE TABLE `join_11tab_sx` (
`addressid` int(11) NOT NULL,
`personid` int(11) NOT NULL,
PRIMARY KEY (`personid`),
UNIQUE KEY `addressid` (`addressid`),
UNIQUE KEY `personid` (`personid`),
KEY `FKF4AA80E44327AAB6` (`personid`),
KEY `FKF4AA80E460C0C9F0` (`addressid`),
CONSTRAINT `FKF4AA80E460C0C9F0` FOREIGN KEY (`addressid`) REFERENCES `address_11tab_sx` (`addressid`),
CONSTRAINT `FKF4AA80E44327AAB6` FOREIGN KEY (`personid`) REFERENCES `person_11tab_sx` (`personid`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
CREATE TABLE `join_11tab_sx` (
`addressid` int(11) NOT NULL,
`personid` int(11) NOT NULL,
PRIMARY KEY (`personid`),
UNIQUE KEY `addressid` (`addressid`),
UNIQUE KEY `personid` (`personid`),
KEY `FKF4AA80E44327AAB6` (`personid`),
KEY `FKF4AA80E460C0C9F0` (`addressid`),
CONSTRAINT `FKF4AA80E460C0C9F0` FOREIGN KEY (`addressid`) REFERENCES `address_11tab_sx` (`addressid`),
CONSTRAINT `FKF4AA80E44327AAB6` FOREIGN KEY (`personid`) REFERENCES `person_11tab_sx` (`personid`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
五、映射方法
<hibernate-mapping>
<class name="com.lavasoft.sx._1_1_tab.Person11tab_sx" table="PERSON_11tab_sx">
<id name="personid">
<generator class="identity"/>
</id>
<property name="name"/>
<property name="age"/>
<join table="join_11tab_sx"
optional="true">
<key column="personid"
unique="true"/>
<many-to-one name="address11tab_sx"
column="addressid"
not-null="true"
unique="true"/>
</join>
</class>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.lavasoft.sx._1_1_tab.Address11tab_sx" table="ADDRESS_11tab_sx">
<id name="addressid">
<generator class="identity"/>
</id>
<property name="addressdetail"/>
<join table="join_11tab_sx"
optional="true"
inverse="true">
<key column="addressid"
unique="true"/>
<many-to-one name="person11tab_sx" column="personid"
not-null="true" unique="true"/>
</join>
</class>
</hibernate-mapping>
六、测试方法
public class Test_11tab_sx {
public static void main(String[] args){
Address11tab_sx add = new Address11tab_sx();
Person11tab_sx p = new Person11tab_sx();
add.setAddressdetail("郑州市经三路");
p.setAge(12);
p.setName("wudalang");
add.setPerson11tab_sx(p);
p.setAddress11tab_sx(add);
Session session = HibernateUtil.getCurrentSession();
Transaction tx = session.beginTransaction();
session.saveOrUpdate(p);
session.saveOrUpdate(add);
tx.commit();
HibernateUtil.closeSession();
}
}
七、测试结果
1) :正常保存.
session.saveOrUpdate(p);
session.saveOrUpdate(add);
Hibernate: insert into PERSON_11tab_sx (name, age) values (?, ?)
Hibernate: insert into ADDRESS_11tab_sx (addressdetail) values (?)
Hibernate: insert into join_11tab_sx (addressid, personid) values (?, ?)
0 0
- Hibernate 一对一连接表双向关联
- Hibernate 一对一连接表双向关联
- Hibernate 一对一连接表双向关联
- Hibernate关联之 一对一连接表双向关联
- Hibernate一对一双向关联
- hibernate 一对一双向关联
- Hibernate一对一双向关联
- Hibernate 双向一对一关联
- Hibernate一对一双向关联
- Hibernate 一对一主键双向关联
- Hibernate 一对一主键双向关联
- Hibernate 一对一双向关联 Annotation
- Hibernate 一对一主键双向关联
- Hibernate一对一主键双向关联
- hibernate一对一主键双向关联
- hibernate一对一主键双向关联
- Hibernate:一对一双向主键关联
- Hibernate 一对一主键双向关联
- 国密SKF接口函数介绍之四:文件管理函数
- 关于Java协程和Kilim的一些概念
- SQL 语句优化
- spring-session实现分布式session共享及自定义sessionid
- Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide五大Android开源组件加载网络图片的优缺点比较
- Hibernate 一对一连接表双向关联
- Android 性能优化之布局优化
- Java 开发 2.0: Kilim 简介
- c——隐式转换——复合类型
- android 格式化本地时间
- 指针降级
- 整理Rapid object detection using a boosted cascade of simple features论文中的要点
- Linux平台总线驱动设备模型
- 分布式搜索之搭建Solrcloud(Solr集群)