Hibernate 关联映射之---- 一对一双向映射
2016-04-11 16:19
393 查看
一对一双向映射,通常有两种配置方式。
1. 外键+unique
2. 外键+主键
先上javabean,这个例子采用的是User和IdCard的关系。
第一种配置:
第二种配置:
1. 外键+unique
2. 外键+主键
先上javabean,这个例子采用的是User和IdCard的关系。
public class IdCard { // 身份证号(主键) private String cardNum;// 对象唯一表示(Object Identified, OID) private String place; // 身份证地址 // 身份证与用户,一对一的关系 private User user; }
public class User { private int userId; private String userName; // 用户与身份证信息, 一对一关系 private IdCard idCard; }
第一种配置:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="edu.cczu.one2one2"> <class name="IdCard" table="t_IdCard"> <id name="cardNum"> <generator class="assigned"></generator> </id> <property name="place" length="20"></property> <!-- 一对一映射,有外键方 unique="true" 给外键字段添加唯一约束 --> <many-to-one name="user" unique="true" column="user_id" class="User" cascade="save-update"></many-to-one> </class> </hibernate-mapping>
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="edu.cczu.one2one1"> <class name="User" table="t_user"> <id name="userId"> <generator class="native"></generator> </id> <property name="userName" length="20"></property> <!-- 一对一映射: 没有外键方 --> <one-to-one name="idCard" class="IdCard"></one-to-one> </class> </hibernate-mapping>
第二种配置:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="edu.cczu.one2one2"> <class name="IdCard" table="t_IdCard"> <id name="user_id"> <!-- id 节点指定的是主键映射, 即user_id是主键 主键生成方式: foreign 即把别的表的主键作为当前表的主键; property (关键字不能修改)指定引用的对象 对象的全名 cn..User、 对象映射 cn.User.hbm.xml、 table(id) --> <generator class="foreign"> <param name="property">user</param> </generator> </id> <property name="cardNum" length="20"></property> <property name="place" length="20"></property> <!-- 一对一映射,有外键方 (基于主键的映射) constrained="true" 指定在主键上添加外键约束 --> <one-to-one name="user" class="User" constrained="true" cascade="save-update"></one-to-one> </class> </hibernate-mapping>
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="edu.cczu.one2one2"> <class name="User" table="t_user"> <id name="userId"> <generator class="native"></generator> </id> <property name="userName" length="20"></property> <!-- 一对一映射: 没有外键方 --> <one-to-one name="idCard" class="IdCard"></one-to-one> </class> </hibernate-mapping>
相关文章推荐
- 时间类转换
- Select执行顺序
- 广播接收器 broadcast sendOrderedBroadcast android
- 剑指Offer——单例模式C++实现
- C++ Q&A(三) C++的内存模型
- poj 1692(动态规划)
- hive udtf使用及explode
- 使用HandleErrorAttribute处理异常
- BZOJ4184: shallot
- Spring Boot 新一代Spring Java应用 : 你能感觉在使用 JavaEE 规范吗?
- macOS安装putty
- Android动态换肤(二、apk免安装插件方式)
- [置顶] 编写两个函数,分别求两个整数的最大公约数和最小公倍数
- Android动态换肤(二、apk免安装插件方式)
- Apache apr中内存分配子的current_free_index成员作用 转转转
- 响铃:企业SaaS上演“三国”杀,谁才是决定生死的变量?
- android apk应用程序如何用代码实现 自己安装自己(自升级)?
- 15款最好的 jQuery Modal(模态窗口)插件
- 【原】Project configuration is not up-to-date with pom.xml
- 青蛙跳100级台阶算法,完整可运行,php版本