hibernate中一对一映射配置详细解析(一)

来源:互联网 发布:装饰公司的网络销售 编辑:程序博客网 时间:2024/05/06 15:33

   本例模仿用户与身份证相对应的关系,即一个用户对应一个身份证信息,且身份证信息不能重复,下面代码是实现基于外键的一对一映射

1.hibernate.cfg.xml


<?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"><!--映射文件:映射一个实体类对象,描述一个对象最终可以直接保存对象数据到数据库中  --><!-- package:要映射的对象所在的包(可选,如果不指定,此文件下所有的类都要指定全路径)     auto-import 默认为true,在写HQL的时候自动导入包名            如果指定为false,在写HQL的时候必须要写上类的全名--><hibernate-mapping package="cn.itcast.c_one2one"><class name="User" table="t_user">   <id name="userId">      <generator class="native"></generator>   </id>   <property name="userName" length="20"></property>   <one-to-one class="IdCard" name="idCard"></one-to-one>   </class></hibernate-mapping>

2.User

package cn.itcast.c_one2one;public class User {private Integer userId;private String userName;//用户与身份证信息,一对一的关系private IdCard idCard;public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public IdCard getIdCard() {return idCard;}public void setIdCard(IdCard idCard) {this.idCard = idCard;}}

3.IdCard

package cn.itcast.c_one2one;public class IdCard {//身份证号主键private String cardNum;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;}}

4.User.hbm.xml

<?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"><!--映射文件:映射一个实体类对象,描述一个对象最终可以直接保存对象数据到数据库中  --><!-- package:要映射的对象所在的包(可选,如果不指定,此文件下所有的类都要指定全路径)     auto-import 默认为true,在写HQL的时候自动导入包名            如果指定为false,在写HQL的时候必须要写上类的全名--><hibernate-mapping package="cn.itcast.c_one2one"><class name="User" table="t_user">   <id name="userId">      <generator class="native"></generator>   </id>   <property name="userName" length="20"></property>   <one-to-one class="IdCard" name="idCard"></one-to-one>   </class></hibernate-mapping>

5.IdCard.hbm.xml


<?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"><!--映射文件:映射一个实体类对象,描述一个对象最终可以直接保存对象数据到数据库中  --><!-- package:要映射的对象所在的包(可选,如果不指定,此文件下所有的类都要指定全路径)     auto-import 默认为true,在写HQL的时候自动导入包名            如果指定为false,在写HQL的时候必须要写上类的全名--><hibernate-mapping package="cn.itcast.c_one2one"><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 class="User" unique="true" name="user"  column="user_id" cascade="save-update"></many-to-one>   </class></hibernate-mapping>

6.Junit测试


package cn.itcast.c_one2one;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 save(){Session session=sf.openSession();session.beginTransaction();//用户User user=new User();user.setUserName("liudehua");//身份证IdCard idCard=new IdCard();idCard.setCardNum("343567677");idCard.setPlace("成都");//关系idCard.setUser(user);//保存session.save(idCard);session.getTransaction().commit();session.close();}}


2 0
原创粉丝点击