`
neptune
  • 浏览: 362038 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

hibernate 一对一 怎样实现更好

阅读更多
hibernate提供两种一对一的方式

这里为了说明我们用一个小型的新闻表进行说明

第一种
其真实意义上的一对一,副表通过主键与主表的主键进行关联,两个主键是相同。

我们来看一上hbm.xml配置
    <!-- 新闻 -->
    <class name="News" table="SITE_NEWS" lazy="true" >
        <id name="nid">
   <generator class="increment" ></generator>
</id>

<natural-id mutable="true">
    <property name="title"  />
</natural-id>

        <one-to-one name="content" class="NewsContent" cascade="all" />

    </class>

    <!-- 新闻内容 -->
    <class name="NewsContent" table="SITE_NEWS_CONTENT" lazy="true" >
        <id name="did">
           <generator class="foreign">
               <param name="property">news</param>
           </generator>
</id>

        <one-to-one name="news" class="News" constrained="true"  />

    </class>


这段配置中最不好理解的是两个地方,其是"新闻内容"的主键生成方式"foreign"和约速constrained。
foreign主键生成方式,其参数property指向其自身配置的一个属性,而这个属性应是一个指向主表定义,也就是说在这个NewsContent类,一定要定义news属性,不管其有没有用。这样通过news就可以得到主键,从而赋值给本副表,完成其主键的生成。这里constrained在本表中一定是true,其声明本表是副表,需要引用约束完成性。其时声明constrained="true"的属性是可以延迟加载,以本例说,NewContent实例的news属性是可以延迟加,但在一般情况下没什么用。

这是一个很典型的一对一关联。其好处是两个表通过主键进行关联,没有什么多余的外键字段,但其也有一个最大的问题,就是News不法实现对content的延迟加载,而这往往是我们最需要的。

第二种

主键通过外键与副表进行关键,单从xml的配置定义上看不像一对一,但其确实实现了一对一。

hbm.xml配置如下:

    <!-- 新闻 -->
    <class name="News" table="SITE_NEWS" lazy="true" >

        <id name="nid">
<generator class="increment" >
</generator>
</id>

<natural-id mutable="true">
    <property name="title"  />
</natural-id>

<many-to-one name="content" column="tid" unique="true" not-null="true" cascade="save-update,delete"/>

    </class>

    <!-- 新闻内容 -->
    <class name="NewsContent" table="SITE_NEWS_CONTENT" lazy="true" >

        <id name="tid">
<generator class="increment" >
</generator>
</id>

<property name="htmlText" column="html_text" type="org.springframework.orm.hibernate3.support.ClobStringType"/>


    </class>

这个配置中我们重要关心主表配置,这里有两个配置有点意思,就是unique="true"和not-null="true",这正是一个主键的声明要求,为一并不为空。这时用一个多对一,来表示一对一关系。而副表,则不需要再引用news类,这是一个单向关联。其时我就的这是最好的,因为在一对一关联中,副表其时就是主表的辅助,通过主表类什么都可以查到,而没有必要从副表查找主表。

这里还有一个最大的好处就是,news可以对content进行延迟加载,这太好了,因为在这里划分副表(NewsContent)的意思就在于,对content的延迟加载。大家想想,在查看某个栏目的新闻列表时,对content属性延迟加载(默认),在查看某个新闻时再通过getContent得到某个新闻的内容。

如果你再建一个副表,只存放那些动态数据,不可被缓存的数据(例如:浏览次数),把News和NewsContent都定义到二级缓存中,用户查看新闻时,只修改NewsBrowseCount表。


 

分享到:
评论

相关推荐

    hibernate一对一的两种实现方式

    本篇文章将详细探讨Hibernate中一对一关联的两种实现方式:基于主键关联和基于外键关联,并通过源码分析及实际应用示例来阐述它们的工作原理和配置细节。 一、基于主键关联 1.1 基本概念 基于主键关联是指两个实体...

    Hibernate一对一,一对多,多对多实例

    本实例将深入探讨Hibernate中的三种基本关联关系:一对一(One-to-One)、一对多(One-to-Many)以及多对多(Many-to-Many)的实现方式。 1. **一对一关联**: 一对一关联通常出现在两个实体之间存在唯一对应关系...

    hibernate一对一关联关系

    以上就是关于Hibernate一对一关联关系的详细解释,通过理解和掌握这些知识点,你可以更有效地在Java项目中设计和实现数据库模型,提高代码的可读性和维护性。希望这份资源能帮助你更好地理解和运用Hibernate框架。

    hibernate一对一外键关系

    在Hibernate中,实现一对一外键关系有几种方式,包括使用主键关联(Primary Key Association)和使用外键关联(Foreign Key Association)。我们首先来看主键关联: 1. **主键关联**:在这种模式下,一方实体的主键...

    hibernate一对一之唯一外键关联(双向关联)

    在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作与业务逻辑代码解耦,提高开发...通过熟练掌握这些知识,我们能够更好地利用Hibernate优化数据库操作,提升项目开发效率。

    hibernate one to one一对一关系示例

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联是对象关系映射(ORM)中的一个重要概念。这种关联关系意味着一个实体最多...通过对示例的深入学习,开发者能够更好地理解和应用Hibernate的一对一关联功能。

    Hibernate一对一

    **标题:“Hibernate一对一”** **描述:** 这篇文章主要探讨了Hibernate框架中的一对一关系映射,这是一种在数据库设计中常见的关联方式。作者通过在博客中分享,详细讲解了如何在Java应用程序中使用Hibernate实现...

    hibernate使用主键关联的一对一关系

    在这个场景中,“hibernate使用主键关联的一对一关系”指的是通过共享主键来实现两个实体类之间的这种一对一绑定。下面我们将深入探讨这一主题。 首先,我们需要理解一对一关系的概念。在数据库中,一对一关系意味...

    hibernate一对多项目

    在JavaEE开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化...通过分析这些代码,你将能更好地掌握Hibernate一对多关系的配置和使用。同时,也可以尝试修改配置或业务逻辑,以加深理解和应用。

    Hibernate 一对一关联映射(主键关联VS唯一外键关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系数据库模型。这篇文章将深入探讨两种主要的一对一关联映射方式:主键关联(Primary Key Join)和唯一外键关联(Foreign Key Join)。我们...

    hibernate一对一映射

    "hibernate一对一映射"是Hibernate中的一个重要概念,它用于表示两个实体类之间一对一的关系。这种关系意味着在一个实体类中,每个实例都唯一对应另一个实体类的单个实例。 一对一映射有以下几种实现方式: 1. **...

    Hibernate Annotation 共享主键一对一双向关联

    本文将详细讲解“Hibernate Annotation 中的共享主键一对一双向关联”。 首先,我们需要理解什么是共享主键(Shared Primary Key)。在一对一的关联关系中,如果两个实体共享同一个主键,那么这种关联被称为共享...

    Hibernate一对一主键映射

    在Java的持久化框架Hibernate中,一对...通过这个实例,开发者可以更好地理解和掌握Hibernate一对一主键映射的实现方法,从而在实际开发中灵活运用。同时,源代码和测试程序提供了动手实践的机会,加深理论知识的理解。

    Hibernate一对一映射

    **Hibernate一对一映射详解** 在Java的持久化框架中,Hibernate是备受青睐的一员,它提供了一种方便的方式来处理对象与数据库之间的映射关系。本文将深入探讨Hibernate中的一对一映射,帮助开发者理解并掌握这种...

    hibernate一对多与多对一

    本篇文章将详细讲解"hibernate一对多与多对一"的关系映射概念,以及如何在实际开发中进行配置和使用。 首先,我们来看一下“一对多”关系。在现实世界中,这种关系可以对应到例如一个班级有多个学生,或者一个人...

    hibernate多对多关联映射

    在深入理解Hibernate多对多关联映射的过程中,查看源码可以帮助我们更好地理解其内部实现。`org.hibernate.persister.collection.AbstractCollectionPersister`和`org.hibernate.action.internal....

    hibernate一对多实例

    描述中的链接指向了一篇由“fangguanhong”在iteye博客上发表的文章,虽然具体内容没有提供,但我们可以根据标题推测该文章可能详细讲解了一个具体的Hibernate一对多关系的实现步骤和示例代码。 在Java的Hibernate...

    Hibernate 一对一实例

    通过以上步骤,你就成功地在MyEclipse中创建了一个Hibernate一对一实例。这个实例可以帮助你更好地理解和应用Hibernate的一对一映射,提高数据库操作的效率和便捷性。在实际开发中,可以根据具体需求调整映射配置,...

    Hibernate一对一关系源码

    在Hibernate中,一对一关系是指两个实体类之间存在一个唯一的对应关系,通常通过主键外键关联实现。下面我们将详细探讨这种关系的配置、实现方式以及源码解析。 1. **配置一对一关系**: - 在实体类中使用`@...

    Hibernate实现原理模拟

    本教程将通过模拟Hibernate的实现原理,帮助开发者深入理解其工作方式,以便更好地运用到实际项目中。 **一、Hibernate概述** Hibernate是一个开源的ORM框架,它提供了一种在Java应用中持久化对象到关系数据库的...

Global site tag (gtag.js) - Google Analytics