one-to-one mapping of hibernate

本文介绍通过ORM技术实现两个表之间的映射关系,并使用Hibernate框架进行具体操作。包括创建表结构、定义XML映射文件及测试代码示例。

first ,create two tables you want to make the OR mapping.

create table T_PASSPORT
(
  ID     NUMBER(4) not null primary key,
  SERIAL VARCHAR2(30) not null
)
create table T_PERSON
(
  ID   NUMBER(4) not null primary key,
  NAME VARCHAR2(30) not null,
  AGE  NUMBER(4) not null
)

alter table T_PASSPORT
  add constraint FK_ID foreign key (ID)
  references T_PERSON (ID) on delete cascade;

 

and the hbm.xml of these two tables are:

<?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">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="Reference.TPassport" table="T_PASSPORT" schema="JIL">
        <id name="id" type="java.lang.Long">
            <column name="ID" precision="4" scale="0" />
            <generator class="foreign">
              <param name="property">TPerson</param>
            </generator>
        </id>
        <one-to-one name="TPerson" class="Reference.TPerson" constrained="true">
        </one-to-one>
        <property name="serial" type="java.lang.String">
            <column name="SERIAL" length="30" not-null="true" />
        </property>
    </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">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="Reference.TPerson" table="T_PERSON" schema="JIL">
        <id name="id" type="java.lang.Long">
            <column name="ID" precision="4" scale="0" />
            <generator class="native"></generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" length="30" not-null="true" />
        </property>
        <property name="age" type="java.lang.Long">
            <column name="AGE" precision="4" scale="0" not-null="true" />
        </property>        
        <one-to-one name="passport" class="Reference.TPassport" cascade="all" outer-join="true"></one-to-one>
    </class>
</hibernate-mapping>

 Test code:

TPerson per = new TPerson();
TPassport passport = new TPassport();
per.setName("haha");
per.setAge(new Long(20));
passport.setSerial("123345");
passport.setTPerson(per);
per.setPassport(passport);
session.save(per);

 then output is :

Hibernate: select hibernate_sequence.nextval from dual
Hibernate: insert into JIL.T_PERSON (NAME, AGE, ID) values (?, ?, ?)
Hibernate: insert into JIL.T_PASSPORT (SERIAL, ID) values (?, ?)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值