0 0

Hibernate 多态查询,如何得到具体子类实例10

我在应用中有一个多态影射,使用的是一个类层次结构一张表的形式。也就是多个类影射到一张表上。
现在用load方法load一个实例,因为这个实例的具体子类型我是知道的,可是无法访问具体子类的属性。我看了,Hibernate给我的是基类的一个proxy,而不是具体子类型的proxy,我希望能得到具体子类型的实例,该怎么做?或者说,load基类无法做到?那在多态查询里拿到的都是基类实例?这样的多态查询有啥用?
问题补充:
汗一个,我居然忘了,除了load还可以get,get是不用proxy的。
还是谢谢热心朋友的回复。
2008年7月03日 13:29

3个答案 按时间排序 按投票排序

0 0

采纳的答案

这篇blog是我翻译的Hibernate官方网站的最佳实践。有参考意义。应该可以解决你的问题。
http://wangxin0072000.iteye.com/admin/blogs/195016

2008年7月03日 16:18
0 0

主要是你的配置文件可能写的有问题。子类与父类之间的关系也要标记上。我blog中都有。摘抄一些例子给你,你看看吧:
父类:

<class name="DocumentInfo" table="DOCUMENTS">
   <id name="key" type="long" column="ID">
       <generator class="native"/>
   </id>
   <property name="name"/>
   <property name="created"/>
   <property name="updated"/>
   <many-to-one name="folder"/>
</class>

子类:
<class name="Document" table="DOCUMENTS" polymorphism="explicit">
   <id name="key" type="long" column="ID">
       <generator class="native"/>
   </id>
   <property name="name"/>
   <property name="created"/>
   <property name="updated"/>
   <many-to-one name="folder"/>
   <property name="text"/>
</class>

这是java码:
public class DocumentInfo implements Node {
   private Long _key;
   private String _name;
   private Calendar _created;
   private Calendar _updated;
   private Folder _folder;
   private Clob _text;
   public String getKey() { return _key; }
   public void setKey(Long key) { _key = key; }
   public String getName() { return _name; }
   public void setName(String name) { _name = name; }
   public Calendar getCreated() { return _created; }
   public void setCreated(Calendar created) { _created = created; }
   public Calendar getUpdated() { return _updated; }
   public void setUpdated(Calendar updated) { _updated = updated; }
   public Folder getFolder() { return _folder; }
   public void setFolder(Folder folder) { _folder = folder; }
}

public class Document extends DocumentInfo {
   private Clob _text;
   public Clob getText() { return _text; }
   public void setText(Clob text) { _text = text; }
}

2008年7月03日 16:56
0 0

不好意思,刚刚地址错了。是这个
http://wangxin0072000.iteye.com/blog/195016

2008年7月03日 16:48

相关推荐

    Hibernate加载方式与多态加载分析

    在Java开发中,Hibernate是一个非常重要的ORM(对象关系映射)框架,它简化了数据库操作。...开发者需要根据具体需求选择合适的加载策略,并确保数据库设计和映射文件的正确性,以充分利用Hibernate的多态加载功能。

    @TypeDiscriminator注解实现多态对象的查询,jackson @JsonTypeInfo注解实现controller多态支持

    这样,在查询数据库时,Spring可以根据这个字段的值返回正确的子类实例。 ```java @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @TypeDiscriminator(column = "animal_type", values = { "DOG" ...

    Hibernate继承关系映射.pdf

    多态查询是指在不了解具体子类的情况下,能够查询并返回继承层次中任何子类的实例。在Hibernate中,多态查询主要依赖于单表映射策略,因为它通过一个共享的表和识别字段实现了对继承结构的支持,从而允许使用更灵活...

    hibernate 3,25

    9. **多态性支持**:Hibernate支持多态查询,能够处理继承关系,允许在查询时返回父类或子类实例,增强了代码的灵活性。 10. **批处理**:通过设置批处理大小,可以批量执行SQL语句,提高数据库操作效率。 在实际...

    hibernate 中HQL语句查询学习笔记

    **HQL**(Hibernate Query Language)是Hibernate框架推荐使用的查询语言,它提供了一种面向对象的方式来查询数据库,支持多种复杂的查询操作,如继承、多态及关联关系的查询。 ##### 默认数据库表和数据 在本文档...

    hibernate源码分析过程

    继承映射可以是整个继承关系都在一个表中、每个子类一个表、每个具体类一个表、隐式多态等。 使用 Hibernate 可以通过 API 查询、更新对象。API 操作可以是 iterator 操作、绑定参数、分页等。 事务性和并发 ...

    Hib继承关系的映射

    - **多态查询**:当通过 Hibernate 从数据库中检索所有 `Employee` 对象时,返回的结果集合中会包含 `Employee` 类及其子类的实例。这种查询称为多态查询,因为它可以处理不同类型的对象。 - **多态关联**:在 `...

    Hibernate3.2.6源代码以及英文api

    11. **多态性支持**:Hibernate支持多态查询,可以在父类上定义查询,返回包含子类对象的结果集。 12. **延迟加载(Lazy Loading)**:通过懒加载机制,关联对象只在真正需要时才从数据库加载,减少内存消耗。 13....

    Hibernate继承映射(annotation)

    - 如果子类很多,discriminator_column的值可能会增多,可能影响查询性能。 - 要注意处理多对一或一对多的关系,因为这些关系可能需要额外的外键约束。 综上所述,Hibernate的单表继承映射是实现对象模型与数据库...

    hibernate_jar

    10. **多态性(Polymorphism)**:Hibernate支持多态查询,使得我们可以根据父类的引用操作子类的对象,这在设计模式如工厂模式、策略模式中非常有用。 在使用这个“hibernate_jar”压缩包时,开发者需要确保已经...

    hibernate的继承映射关系

    这种方式需要在根类对应的表中增加一个字段来标识具体类的类型,通常命名为class或者subclass,以此来区分不同子类的实例。例如,对于Employee类的表,可以通过一个名为type的字段,其值可以是“HourlyEmployee”或...

    hibernate中文技术文档

    Hibernate支持多态映射,允许父类引用子类对象,而无需知道具体的子类类型,增强了代码的灵活性和可扩展性。 通过深入学习《Hibernate中文技术文档》,开发者可以掌握如何有效地使用Hibernate进行数据库操作,提高...

    hibernate

    `Table Per Subclass` 是一种处理多态继承关系的策略,它将每个子类映射到数据库中的独立表。下面我们将通过具体的例子代码来探讨这一概念,并了解如何在实际项目中应用。 **一、Hibernate 概述** Hibernate 是一个...

    HibernateApi.zip

    4.4 支持多态:允许父类和子类的对象在同一个集合中存储,实现灵活的数据模型。 4.5 集合映射:如List、Set、Map等,映射数据库中的关联表。 五、参考资料 为了深入了解Hibernate API,你可以参考压缩包中的两份...

    hibernate-mapping参数详解

    10. `discriminator-value`:在多态映射中,用于区分不同子类的值,可以是null或非null。 11. `mutable`:默认为`true`,表示类的实例是可变的。如果设置为`false`,则对象被视为不可变,这会影响Hibernate的行为。...

    Hibernate+中文文档

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....

    精通HIBERNATE

    8. **多态性支持**:Hibernate支持多态查询,允许在不同子类之间进行查询,增强了代码的灵活性。 9. **级联操作**:通过级联属性,可以在操作一个对象时自动处理与其关联的其他对象,如保存、更新、删除等。 10. *...

    hibernate-3.2

    9. **多态性支持**:Hibernate 3.2 支持多态查询,可以在父类上定义查询,返回子类实例。 10. **级联操作**:关联对象间的级联操作(Cascade)可以自动处理关联对象的持久化状态,比如删除一个实体时,其关联的实体...

    HibernateDemo003_TABLE_PER_CLASS.rar_class

    7. **实例化对象**:由于每个类有自己的表,Hibernate在加载对象时会直接从相应的表中获取数据,这意味着子类实例可以直接通过SessionFactory的get或load方法获取,而无需关心其实际类型。 综上所述,"Hibernate...

    hibernate3.2中文文档(chm格式)

    14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与连接(Join) 14.4. join 语法的形式 14.5. select子句 14.6. 聚集函数 14.7. 多态查询 14.8. where子句 14.9....

Global site tag (gtag.js) - Google Analytics