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

来源:互联网 发布:开淘宝客的条件 编辑:程序博客网 时间:2024/05/18 07:58

     本例模仿的是用户与身份证信息,即一个用户对应一个身份证信息,且用户的身份证信息不能重复,采取基于主键的映射配置策略,下面是具体实现代码:


1.hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration>    <!-- 通常,一个session-factory节点代表一个数据库 --><session-factory><!-- 1.数据库连接配置 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql:///hib-demo</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">123456</property><!--数据库方法配置,hibernate在运行的时候,会根据不同的方言生成符合当前数据库语法的sql  --><property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property><!-- 2.其他相关配置 -->   <!--2.1显示hibernate在运行的时候执行的sql语句  --><property name="hibernate.show_sql">true</property>   <!-- 2.2格式化sql <property name="hibernate.format_sql">true</property>--><!--    2.3自动建表  --><property name="hibernate.hbm2ddl.auto">create</property><!-- 3.加载所有映射 <mapping resource="cn/itcast/a_hello/Employee.hbm.xml"/>--></session-factory></hibernate-configuration>

2.User


package cn.itcast.c_one2one2;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_one2one2;public class IdCard {private Integer user_id;public Integer getUser_id() {return user_id;}public void setUser_id(Integer user_id) {this.user_id = user_id;}//身份证号主键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_one2one2"><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"><hibernate-mapping package="cn.itcast.c_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>

6.Junit测试


package cn.itcast.c_one2one2;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();}}


0 0
原创粉丝点击