Hibernate中,One2One映射关系的XML实现方式

来源:互联网 发布:工业企业 人工智能 编辑:程序博客网 时间:2024/05/20 23:30

1、关于实体之间One2One之间的映射实现

2、Person.java的实现

public class Person {private int id;private int age;private String name;       // one2one,持有IdCard       private IdCard idCard;           //get set}
3、Person.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的名称 --><hibernate-mapping package="com.hibernate.entity"><class name="Person" table="person"><!-- 主键 ,映射 --><id name="id" column="id"><!-- 自动生成主键的规则 --><generator class="native" /></id><!-- 非主键,映射 --><property name="name" column="name"></property><property name="age" column="age"></property><!--one2one的映射 --><!--1、第一种配置方法 --><!--用于保存IdCard的外键 --><many-to-one name="idCard" unique="true" column="cardid"></many-to-one><!--2、第二种配置方法 --><!-- constrained="true",表示Student表的主键收到Idcart主键的约束,相当于同时又是个外键 --><!--这种配置方法,Student表的主键,同时也是Idcard表的外键 --><!-- <one-to-one name="idCard" constrained="true"></one-to-one> --><!--3、一个小的总结 --><!--这里面重要的一个知识点就是<many-to-one>和<one-to-one>的区别, --><!-- 这里主要应用了这个不同。<many-to-one>不仅可以加载到另一端的数据,还会在多的一端表中加入一个外键 --><!-- 而<one-to-one>只会加载另一端数据作为外键约束,不会影响表结构。 --></class></hibernate-mapping>

4、IdCard.java的实现

public class IdCard {private int id;private String idcardnumber;        //get set}

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的名称 --><hibernate-mapping package="com.hibernate.entity"><class name="IdCard" table="idcart"><!-- 主键 ,映射 --><id name="id" column="id"><!-- 自动生成主键的规则 --><generator class="native" /></id><!-- 非主键,映射 --><property name="idcardnumber" column="idcardnumber"></property></class></hibernate-mapping>

6、hibernate.cfg.xml的配置

6.1 将IdCard.hbm.xml和Person.hbm.xml加入hibernate.cfg.xml中

                <!--3.加载实体的映射文件 --><mapping resource="com/hibernate/entity/IdCard.hbm.xml" /><mapping resource="com/hibernate/entity/Person.hbm.xml" />

6..2 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:///hibernate</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">1234</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">update</property><!--3.加载实体的映射文件 --><mapping resource="com/hibernate/entity/IdCard.hbm.xml" /><mapping resource="com/hibernate/entity/Person.hbm.xml" /></session-factory></hibernate-configuration>

7、测试代码

public class HibernateTest {@Testpublic void testone2one() {Person stu1 = new Person();stu1.setAge(18);stu1.setName("18");IdCard idCard = new IdCard();idCard.setIdcardnumber("1234567");// 注册关系stu1.setIdCard(idCard);// 保存到数据库IClassRoomDao roomDao = new ClassRoomDaoImpl();IStudentDao studentDao = new StudentDaoImpl();// 保存一的一方roomDao.add(idCard);// 保存多的一方studentDao.add(stu1);}}

8、程序运行结果截图


9、代码下载

代码下载


1 0
原创粉丝点击