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 (?, ?)

<think>好的,用户想知道如何查看Hibernate 3.0的hibernate-mapping-3.0.dtd中many-to-one参数的默认值。我需要先回忆一下Hibernate的DTD文件结构,以及many-to-one元素的属性。 首先,Hibernate的映射文件使用DTD来定义结构,所以应该直接查看对应的DTD文件。用户提到的是3.0版本,我需要确认这个版本中many-to-one元素有哪些属性,以及它们的默认值。 接下来,我应该找到hibernate-mapping-3.0.dtd文件的位置。通常Hibernate的发布包中会包含这些DTD文件,或者在官方网站的文档里。可能需要在线访问或者本地查找。 然后,找到many-to-one元素的定义部分。在DTD中,元素的属性通过<!ATTLIST>来声明,其中包括属性名、类型和默认值。例如,如果某个属性声明为#IMPLIED,表示可选,没有默认值;如果是#REQUIRED,表示必须提供;如果有具体的值,比如"true",那就是默认值。 例如,对于not-null属性,可能在DTD中有这样的定义: <!ATTLIST many-to-one not-null (true|false) "false"> 这里的默认值就是false。同样,其他属性如unique、lazy等也会有类似的声明。 用户可能需要知道哪些属性有默认值,以及如何确认这些默认值。需要逐一检查many-to-one元素的所有属性声明,并解释它们的默认情况。同时,需要提醒用户,DTD中的默认值可能被Hibernate的代码覆盖,或者根据其他配置改变行为,所以实际使用时还需要参考官方文档或源码。 另外,考虑到用户可能不熟悉如何解析DTD文件,应该给出具体的步骤,比如查找DTD文件中的many-to-one部分,查看每个属性的定义,并列出常见的属性及其默认值。例如: 1. 访问DTD文件(如在线URL或本地路径)。 2. 搜索many-to-one的ATTLIST部分。 3. 分析每个属性的默认值声明。 最后,可能需要总结常用的many-to-one属性及其默认值,帮助用户快速理解,并提醒注意事项,比如默认值可能受其他配置影响,建议查阅官方文档确认。</think>要查看 Hibernate 3.0 的 `hibernate-mapping-3.0.dtd` 中 `many-to-one` 参数的默认值,需通过以下步骤分析 DTD 文件结构: --- ### 1. **定位 DTD 文件** Hibernate 3.0 的 DTD 文件可通过以下方式访问: - **在线地址**: ```xml <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> ``` - **本地文件**:在 Hibernate 3.0 的发布包中找到 `hibernate-mapping-3.0.dtd`。 --- ### 2. **解析 `many-to-one` 的 DTD 定义** 在 DTD 文件中搜索 `many-to-one` 元素的属性声明(形如 `<!ATTLIST many-to-one ...>`)。 **关键属性及其默认值**如下: | 属性名 | 类型/可选值 | 默认值 | 说明 | |----------------|----------------------------------|------------------|------| | `column` | CDATA | **属性名** | 关联字段名 | | `class` | CDATA | **无** | 目标实体类 | | `not-null` | (true\|false) | `"false"` | 是否允许空值 | | `unique` | (true\|false) | `"false"` | 是否唯一约束 | | `lazy` | (proxy\|no-proxy\|false) | `"proxy"` | 延迟加载策略 | | `fetch` | (join\|select) | `"select"` | 数据抓取策略 | | `access` | CDATA | `"property"` | 字段访问策略 | | `cascade` | CDATA | **无** | 级联操作类型 | --- ### 3. **语法示例** ```xml <many-to-one name="department" column="dept_id" class="Department" not-null="true" fetch="join" /> ``` - `not-null` 未显式声明时,默认 `false`(允许空值)。 - `fetch` 未显式声明时,默认 `select`(单独查询)。 --- ### 4. **注意事项** - **隐式默认值**:若 DTD 中未明确指定默认值(如 `class` 属性),则需通过 Hibernate 源码或文档确认行为。 - **代码覆盖**:Hibernate 可能通过代码逻辑覆盖 DTD 默认值(例如 `lazy="proxy"` 的实际行为由字节码增强决定)。 - **版本差异**:Hibernate 5+ 改用 XSD 而非 DTD,需注意版本兼容性。 --- ### 5. **验证建议** - **查阅官方文档**:参考 Hibernate 3.0 的 [官方映射文档](https://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html)。 - **调试日志**:启用 Hibernate 的 `show_sql` 和 `format_sql`,观察生成的 SQL 语句间接推断行为。 通过分析 DTD 文件并结合实际配置,可明确 `many-to-one` 各属性的默认行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值