hibernate中的一对一映射
来源:互联网 发布:破解会员软件 编辑:程序博客网 时间:2024/05/29 02:11
一对一约束图解
**
一 、基于外键的约束
**
**
package cn.itcast.c_one2one;
// 用户
public class User {
private int userId;private String userName;// 用户与身份证信息, 一对一关系private IdCard idCard;public IdCard getIdCard() { return idCard;}public void setIdCard(IdCard idCard) { this.idCard = idCard;}public int getUserId() { return userId;}public void setUserId(int userId) { this.userId = userId;}public String getUserName() { return userName;}public void setUserName(String userName) { this.userName = userName;}
}
package cn.itcast.c_one2one;
// 身份证
public class IdCard {
// 身份证号(主键)private String cardNum;// 对象唯一表示(Object Identified, OID)private String place; // 身份证地址// 身份证与用户,一对一的关系private User user;///把该对象映射到数据库,生成唯一的外键字段public String getCardNum() { return cardNum;}public void setCardNum(String cardNum) { this.cardNum = cardNum;}public String getPlace() { return place;}public void setPlace(String place) { this.place = place;}public User getUser() { return user;}public void setUser(User user) { this.user = user;}
}
<!-- 一对一映射,有外键方(这里不能用one-to-one,只能用many-to-one,这里是特殊的多对一(只是多了唯一约束)) unique="true" 给外键字段添加唯一约束 --> <many-to-one name="user" unique="true" column="user_id" class="User" cascade="save-update"></many-to-one> <!-- 级联保存 --></class>
<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>
**
- 二、基于主键的约束
user代码与上面一样,就不写了
user配置文件也与上面一样,不写了
两个程序的App测试代码是一样的,统一写在最下面
**
package cn.itcast.c_one2one2;
// 身份证
public class IdCard {
private int user_id; //这里将t_user表的主键作为t_idcard表主键// 身份证号private String cardNum;private String place; // 身份证地址// 身份证与用户,一对一的关系private User user;public int getUser_id() { return user_id;}public void setUser_id(int userId) { user_id = userId;}public String getCardNum() { return cardNum;}public void setCardNum(String cardNum) { this.cardNum = cardNum;}public String getPlace() { return place;}public void setPlace(String place) { this.place = place;}public User getUser() { return user;}public void setUser(User user) { this.user = user;}
}
<!-- 基于主键的约束 --><class name="IdCard" table="t_IdCard"> <id name="user_id"> <!-- id 节点指定的是主键映射, 即user_id是本表的主键 主键生成方式: foreign 即把别的表的主键作为当前表的主键; property (关键字不能修改)(user)指定引用的对象 对象的全名 cn..User、 再找对象映射 cn.User.hbm.xml、 再找table(id)(即userId) --> <generator class="foreign"> <param name="property">user</param> <!-- user --> </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> <!-- 给主键(user_id)添加外键约束 --></class>
package cn.itcast.c_one2one;
import org.hibernate.Hibernate;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.junit.Test;
public class App {
private static SessionFactory sf;static { sf = new Configuration() .configure() .addClass(IdCard.class) .addClass(User.class) // 测试时候使用 .buildSessionFactory();}@Testpublic void getSave() { Session session = sf.openSession(); session.beginTransaction(); // 用户 User user = new User(); user.setUserName("Jack"); // 身份证 IdCard idCard = new IdCard(); idCard.setCardNum("441202XXX"); idCard.setPlace("广州XXX"); // 关系 idCard.setUser(user); // ----保存---- //session.save(user); ///这里不用这句话的原因是因为:已经在IdCard中设置了级联操作,即在IdCard中已经设置了与User的关系,保存idCard也即保存了user对象 session.save(idCard); session.getTransaction().commit(); session.close();}
}
阅读全文
0 0
- hibernate中的一对一映射
- Hibernate中的一对一(onetoone)映射
- Hibernate中的一对一映射文件的配置
- hibernate中的关联映射图解----一对一
- hibernate中的一对一映射配置详解
- Hibernate中的关联关系一对一映射
- Hibernate中的几种关联映射------一对一关联映射
- hibernate一对一映射例子
- hibernate一对一关联映射--
- Hibernate映射 一对一例
- hibernate一对一关联映射
- hibernate一对一映射
- hibernate一对一关联映射
- Hibernate关系映射一对一
- hibernate一对一映射
- hibernate 映射关系 一对一
- Hibernate -- 一对一映射
- hibernate关系映射 一对一
- Python Flask打造一个视频网站实战视频教程
- adb命令安装apk,和安装问题daemon not running. starting it now on port 5037解决
- Linux每次开机都要source profile的解决办法
- MongoDB的安装与MongoDB服务配置
- 数据结构实验之栈与队列六:下一较大值(二)
- hibernate中的一对一映射
- 卷积神经网络系列之softmax,softmax loss和cross entropy的讲解
- 第三章 Java的基本程序设计结构(1)
- 构造器相关基础题
- 生成唯一ID
- centos 安装 mysql 忘记 root 密码
- CentOS Linux搭建SVN服务器
- 人脸对齐 python代码
- Mysql学习总结(51)——Linux主机Mysql数据库自动备份