Hibernate一对一主键关联(三)

来源:互联网 发布:mac air怎么看内存 编辑:程序博客网 时间:2024/05/16 05:07

一:深入浅出Hibernate里面一对一关联例子,一个人有一个护照

二:通过代码讲解一对一关系

1:在eclipse中新建JAVA PROJECT工程,引入hibernate-release-5.2.2.Final\lib\required下面所有包,还有Oracle驱动包,还有JUnit包

2:编写人和护照的model

package com.hibernate.model;public class TUser {private String id;private String name;private int age;private TPassport passport;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public TPassport getPassport() {return passport;}public void setPassport(TPassport passport) {this.passport = passport;}}

package com.hibernate.model;public class TPassport {private String id;private String serial;private TUser user;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getSerial() {return serial;}public void setSerial(String serial) {this.serial = serial;}public TUser getUser() {return user;}public void setUser(TUser user) {this.user = user;}}
3:数据库表设计

-- Create tablecreate table T_USER(  id   VARCHAR2(32),  name VARCHAR2(50),  age  NUMBER)

-- Create tablecreate table T_PASSPORT(  id     VARCHAR2(32),  serial VARCHAR2(50))
4:配置hibernate.cfg.xml文件

<?xml version='1.0' encoding='utf-8'?>  <!DOCTYPE hibernate-configuration PUBLIC          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  <hibernate-configuration>  <session-factory>      <!-- 数据库JDBC驱动 -->      <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>     <!-- 数据库URL -->     <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>      <!-- 数据库用户名  密码-->    <property name="connection.username">mzzxzj0913</property>      <property name="connection.password">1</property>    <!-- 数据库Dialect匹配平台特性 -->      <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>      <!-- 是否将运行期生成的SQL输出以供调试 -->    <property name="show_sql">true</property>      <!-- 映射文件配置 -->    <mapping resource="com/hibernate/xml/TUser.hbm.xml" />      <mapping resource="com/hibernate/xml/TPassport.hbm.xml" />          </session-factory>  </hibernate-configuration> 

5:配置映射文件

<?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE hibernate-mapping PUBLIC          "-//Hibernate/Hibernate Mapping DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">    <hibernate-mapping>     <class name="com.hibernate.model.TUser" table="T_USER">     <id name="id" column="id" type="string"></id>   <property name="name" column="name" type="java.lang.String"></property>        <property name="age" column="age" type="java.lang.Integer"></property>        <!-- cascade主控方执行save、update、delete的时候关联对象是否执行同一操作 -->        <one-to-one name="passport" class="com.hibernate.model.TPassport" cascade="all" outer-join="true"></one-to-one>      </class></hibernate-mapping> 

<?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE hibernate-mapping PUBLIC          "-//Hibernate/Hibernate Mapping DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">    <hibernate-mapping>     <class name="com.hibernate.model.TPassport" table="T_PASSPORT">     <id name="id" column="id" type="string">   <generator class="foreign">   <param name="property">user</param>   </generator>   </id>   <!-- constrained告诉hibernate当前主键存在约束 -->   <one-to-one name="user" class="com.hibernate.model.TUser" constrained="true"></one-to-one>   <property name="serial" column="serial" type="java.lang.String"></property>    </class></hibernate-mapping> 

6:编写测试类,执行就会往表里插入数据,代码架构一样

package com.hibernate.model;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import junit.framework.TestCase;public class HibernateTest extends TestCase{private Session session;/** * TestCase初始化的时候会自动调用方法setUp */@Overrideprotected void setUp() throws Exception {Configuration config = new Configuration().configure();SessionFactory sessionFactory = config.buildSessionFactory();session = sessionFactory.openSession();}/** * TestCase执行完毕时,会自动调用tearDown */@Overrideprotected void tearDown() throws Exception {session.close();}/** * Junit会以test为前缀的方法作为测试方法 */public void testInsert(){TUser user = new TUser();user.setId("1");user.setName("xxh");user.setAge(10);TPassport passport = new TPassport();passport.setSerial("ceshi");passport.setUser(user);user.setPassport(passport);Transaction tx = session.beginTransaction();//因为cascade设置为all,所以会一同保存session.save(user);tx.commit();}}



0 0