`

many-to-one进行类关联的问题

阅读更多
在使用hibernate进行类关联的时候,通常采用如下的做法:

 

<class
            name="org.appfuse.task.model.Advertisement"
            table="advertisement_t"
    >
...
        <many-to-one
            name="resource"
                    class="org.appfuse.task.model.Resource"
                    column="resource_id"
                cascade="all"
        >

 

但是假设我们Resource对于不同的资源需要进行构造不同的子类,比如ImageResource, TextResource, HtmlResource, etc. 在web进行不同资源展现的时候,就需要针对不同资源进行不同的展现。

此时,如果直接访问某个字类的属性,就会告知没有这个属性。通过在webcontroller跟踪advertisement对象的resource属性可以发现,它不是某个字类的对象,它是Resource$EnhancerbyCglib!通过查询hibernate的文档,原来这是hibernate的many-to-one的配置:

lazy (optional - defaults to proxy): By default, single point associations are proxied. lazy="no-proxy" specifies that the property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation). lazy="false" specifies that the association will always be eagerly fetched.

原来默认的情况下使用proxy方式连接,这时候产生的不是实际的类,而是cglib代理类。只有对他的属性进行访问的时候,才会构造真正的实际类。

解决方法很简单,在many-to-one配置中增加lazy=false,就可以在页面中直接访问各子类的特殊属性啦。

 

相关文章:http://www.wangchao.net.cn/bbsdetail_925021.html

 

分享到:
评论
1 楼 fishyych 2008-01-28  
另一种解决方法:在sping mvc里面,可以控制hibernate的生命期,通过hibernate filter来进行管理:
<!--  hibernate session filter  --> 
  < filter > 
   < filter-name > hibernateFilter </ filter-name > 


   < filter-class >    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
   </ filter-class > 
  </ filter > 
 


 < filter-mapping > 
   < filter-name > hibernateFilter </ filter-name > 
   < url-pattern > *.do </ url-pattern > 
  </ filter-mapping > 

相关推荐

    (4)Hibernate中的many-to-one和one-to-many关系

    many-to-one关系表示在一个实体类中,一个实例可以与另一个实体类的多个实例相关联。例如,在一个学生和班级的关系中,一个班级可以有多个学生,但一个学生只能属于一个班级。在Hibernate中,我们通过`@ManyToOne`...

    Hibernate one-to-many / many-to-one关系映射

    "Hibernate one-to-many / many-to-one关系映射"是两个基本的关系类型,用于表示实体间的关联。在这个主题中,我们将深入探讨这两种关系映射的原理、配置和实际应用。 一、一对一(one-to-one)与一对多(one-to-...

    Many-to-one关联映射

    关联映射的本质: 将关联关系映射到数据库,所谓的...&lt;many-to-one&gt;会在多的一端加入一个外键,指向一的一端,这个外键是由&lt;many-to-one&gt; 中的column属性定义的,如果忽略了这个属性那么默认的外键与实体的属性一致

    hibernate many-to-one(多对一)及 cascade(级联).doc

    - 在 `user.hbm.xml` 文件中,`&lt;many-to-one&gt;` 标签被用来定义 `User` 实体与 `Group` 实体之间的关联关系。其中,`name` 属性表示关联字段的名称,`column` 属性表示数据库表中对应的字段名。 #### Many-to-One ...

    Hibernate Mapping Many-to-One 实例 内附源代码及附件下载

    本实例将详细讲解如何在Hibernate中实现Many-to-One关系映射,这是一种常见的数据库关联,表示一个实体可以与多个其他实体相关联。 在Many-to-One关系中,通常一个实体(如部门)可以有多个相关实体(如员工),而...

    Hibernate Tutorial 04 (Many-to-one and One-to-one Association

    #### 一、多对一关联(Many-to-One) 在本章中,我们将探讨如何在 Hibernate 中处理多对一关联。这种关联类型非常常见,在许多应用中都会遇到。例如,在一个在线书店应用中,每本书都与一个出版商关联,而一个出版...

    hibernate one-to-one 一对一唯一外键关联映射_单向 and 双向

    在上面的配置中, `&lt;many-to-one&gt;` 标签指定了Person实体与IdCard实体之间的一对一唯一外键关联关系,其中unique="true"指定了多的一端的多重性为一。 Hibernate 一对一唯一外键关联映射的应用 在实际应用中,一对...

    hibernate学习5之one-to-many双向关联.docx

    `&lt;set&gt;`标签里的`&lt;one-to-many&gt;`子标签指定了与之关联的类。 在XML映射文件中,`Student.hbm.xml`包含了`&lt;many-to-one&gt;`元素,表示学生对象引用了一个班级对象,通过`classesid`列连接。而`Classes.hbm.xml`则使用...

    hibernate one-to-many 单/双向关联映射配置心得

    本文主要关注Hibernate中的一个核心概念——一对一(One-to-One)、一对多(One-to-Many)和多对一(Many-to-One)关联映射,特别是关于“一到多”单向和双向关联映射的配置心得。 首先,让我们了解“一到多”关联...

    Hibernate one to many(many to one) 配置

    **标题与描述解析** 标题"Hibernate one to many(many to one) 配置...以上是关于Hibernate中One-to-Many和Many-to-One关联配置的基本知识。实际应用中,还需要考虑性能、并发、事务等因素,进行合理的优化和设计。

    hibernate 关联映射(一) many to one

    在Hibernate中实现Many-to-One关联,我们需要在实体类中定义对应的属性,并通过注解来配置关联关系。例如,如果我们有"Student"和"Course"两个实体,一个学生可以选修多门课程,但一门课程只能被一个学生选为必修: ...

    day36 07-Hibernate抓取策略:many-to-one上的抓取策略

    在"many-to-one"关系中,一个实体可以与多个其他实体相关联。默认情况下,Hibernate会设置这种关联为懒加载,即只有当我们尝试访问被关联的对象时,才会发起数据库查询。但这种方式可能不适用于所有场景,特别是在...

    hiberante - one to many - update

    标题中的“Hibernate - one to many - update”指向的是一个关于Hibernate框架中的一对多关联关系在更新操作时的专题。Hibernate是Java开发中常用的持久化框架,它简化了数据库操作,使得开发者可以更加关注业务逻辑...

    Hibernate one-to-many-annotation

    在Hibernate中,`one-to-many`关系是常见的实体间关系之一,表示一个实体可以与多个其他实体相关联。本文将深入探讨`Hibernate one-to-many`注解的使用和实现细节。 ### 一、`@OneToMany`注解概述 `@OneToMany`...

    Hibernate应用例子many-to-many

    本示例将详细讲解如何在Hibernate中实现多对多(many-to-many)的关系映射。 在数据库设计中,多对多关系是指两个实体之间存在多个关联,比如学生和课程的关系,一个学生可以选修多门课程,一门课程也可以被多个...

    hibernate many to one

    在Java的持久化框架Hibernate中,"Many-to-One"关系是一种常见的关联映射类型,它表示一个实体(类)可以与多个其他实体实例相关联。在这个主题中,我们将深入探讨Hibernate如何处理这种关系,以及如何在实际编程中...

    Hibernate实现many-to-many的映射关系

    在`Course`的映射文件中,我们使用`&lt;set&gt;`元素来表示课程可以对应多个选课记录(StuCourse),并用`&lt;one-to-many&gt;`指定关联的类是`StuCourse`。同时,`&lt;key&gt;`元素指定了外键字段`course_id`,它对应于`Course`的主键...

    Hibernate-one-to-many

    同时,`Account.hbm.xml`中的`many-to-one`元素将`column`属性设置为`FID`,表示通过`FID`字段关联到`User`实体。 #### 测试场景解释 在测试场景中,我们创建了一个`User`对象和一个`Account`对象,并在`User`对象...

Global site tag (gtag.js) - Google Analytics