-
Hibernate 多态查询,如何得到具体子类实例10
我在应用中有一个多态影射,使用的是一个类层次结构一张表的形式。也就是多个类影射到一张表上。
现在用load方法load一个实例,因为这个实例的具体子类型我是知道的,可是无法访问具体子类的属性。我看了,Hibernate给我的是基类的一个proxy,而不是具体子类型的proxy,我希望能得到具体子类型的实例,该怎么做?或者说,load基类无法做到?那在多态查询里拿到的都是基类实例?这样的多态查询有啥用?
问题补充:
汗一个,我居然忘了,除了load还可以get,get是不用proxy的。
还是谢谢热心朋友的回复。2008年7月03日 13:29
3个答案 按时间排序 按投票排序
-
采纳的答案
这篇blog是我翻译的Hibernate官方网站的最佳实践。有参考意义。应该可以解决你的问题。
http://wangxin0072000.iteye.com/admin/blogs/195016
2008年7月03日 16:18
-
主要是你的配置文件可能写的有问题。子类与父类之间的关系也要标记上。我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
-
不好意思,刚刚地址错了。是这个
http://wangxin0072000.iteye.com/blog/1950162008年7月03日 16:48
相关推荐
在Java开发中,Hibernate是一个非常重要的ORM(对象关系映射)框架,它简化了数据库操作。...开发者需要根据具体需求选择合适的加载策略,并确保数据库设计和映射文件的正确性,以充分利用Hibernate的多态加载功能。
这样,在查询数据库时,Spring可以根据这个字段的值返回正确的子类实例。 ```java @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @TypeDiscriminator(column = "animal_type", values = { "DOG" ...
多态查询是指在不了解具体子类的情况下,能够查询并返回继承层次中任何子类的实例。在Hibernate中,多态查询主要依赖于单表映射策略,因为它通过一个共享的表和识别字段实现了对继承结构的支持,从而允许使用更灵活...
9. **多态性支持**:Hibernate支持多态查询,能够处理继承关系,允许在查询时返回父类或子类实例,增强了代码的灵活性。 10. **批处理**:通过设置批处理大小,可以批量执行SQL语句,提高数据库操作效率。 在实际...
**HQL**(Hibernate Query Language)是Hibernate框架推荐使用的查询语言,它提供了一种面向对象的方式来查询数据库,支持多种复杂的查询操作,如继承、多态及关联关系的查询。 ##### 默认数据库表和数据 在本文档...
继承映射可以是整个继承关系都在一个表中、每个子类一个表、每个具体类一个表、隐式多态等。 使用 Hibernate 可以通过 API 查询、更新对象。API 操作可以是 iterator 操作、绑定参数、分页等。 事务性和并发 ...
- **多态查询**:当通过 Hibernate 从数据库中检索所有 `Employee` 对象时,返回的结果集合中会包含 `Employee` 类及其子类的实例。这种查询称为多态查询,因为它可以处理不同类型的对象。 - **多态关联**:在 `...
11. **多态性支持**:Hibernate支持多态查询,可以在父类上定义查询,返回包含子类对象的结果集。 12. **延迟加载(Lazy Loading)**:通过懒加载机制,关联对象只在真正需要时才从数据库加载,减少内存消耗。 13....
- 如果子类很多,discriminator_column的值可能会增多,可能影响查询性能。 - 要注意处理多对一或一对多的关系,因为这些关系可能需要额外的外键约束。 综上所述,Hibernate的单表继承映射是实现对象模型与数据库...
10. **多态性(Polymorphism)**:Hibernate支持多态查询,使得我们可以根据父类的引用操作子类的对象,这在设计模式如工厂模式、策略模式中非常有用。 在使用这个“hibernate_jar”压缩包时,开发者需要确保已经...
这种方式需要在根类对应的表中增加一个字段来标识具体类的类型,通常命名为class或者subclass,以此来区分不同子类的实例。例如,对于Employee类的表,可以通过一个名为type的字段,其值可以是“HourlyEmployee”或...
Hibernate支持多态映射,允许父类引用子类对象,而无需知道具体的子类类型,增强了代码的灵活性和可扩展性。 通过深入学习《Hibernate中文技术文档》,开发者可以掌握如何有效地使用Hibernate进行数据库操作,提高...
`Table Per Subclass` 是一种处理多态继承关系的策略,它将每个子类映射到数据库中的独立表。下面我们将通过具体的例子代码来探讨这一概念,并了解如何在实际项目中应用。 **一、Hibernate 概述** Hibernate 是一个...
4.4 支持多态:允许父类和子类的对象在同一个集合中存储,实现灵活的数据模型。 4.5 集合映射:如List、Set、Map等,映射数据库中的关联表。 五、参考资料 为了深入了解Hibernate API,你可以参考压缩包中的两份...
10. `discriminator-value`:在多态映射中,用于区分不同子类的值,可以是null或非null。 11. `mutable`:默认为`true`,表示类的实例是可变的。如果设置为`false`,则对象被视为不可变,这会影响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....
8. **多态性支持**:Hibernate支持多态查询,允许在不同子类之间进行查询,增强了代码的灵活性。 9. **级联操作**:通过级联属性,可以在操作一个对象时自动处理与其关联的其他对象,如保存、更新、删除等。 10. *...
9. **多态性支持**:Hibernate 3.2 支持多态查询,可以在父类上定义查询,返回子类实例。 10. **级联操作**:关联对象间的级联操作(Cascade)可以自动处理关联对象的持久化状态,比如删除一个实体时,其关联的实体...
7. **实例化对象**:由于每个类有自己的表,Hibernate在加载对象时会直接从相应的表中获取数据,这意味着子类实例可以直接通过SessionFactory的get或load方法获取,而无需关心其实际类型。 综上所述,"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....