Hibernate加载方式与多态加载分析:
1. Session中的load和get方法:
a) Load方法支持CGLIB lazy动态代理方式,所以加载的时候它会生成一个代理类.如果设置lazy为true 由于代理类不是真正的实例 无法用instenceof判断类的归属,所以它不支持多态加载.反之,如果把lazy设置为false那么就和get一样可以支持多态加载了.
b) Get方法默认不支持CGLIB lzay动态代理方式, 所以它加载的时候会直接产生一个真实的类.他是支持多态加载的.
注: load 和 get 方式ApI中所加载的实体的运行时类(Class<?>)是又两部分组成:
1. 这个Class<?>运行时类对应的实体对象.
2. 与实体对象对应的映射文件.
所以,如果没有由这两个组成session会看作是不合法的参数,并抛出异常. 这就是它不会和Criteria方式加载(Object.class)类型的参数可以通过的根本原因.
2. Query中的HQL接口:
HQL的查询方法说是通过对象查询的,但是经过分析, 它是根据配置文件来进行查询的,因为它定义查询语句的方式是根据映射文件中表的结构进行查询的. 所以,不同结构的映射文件中,同样的方法可能达到的效果是完全不一样的. 比如”From java.lang.Object”.
注: From java.lang.Object 是取出所有表中的所有数据,相当于链接全部表的字段.
3. Criteria对象查询接口:
顾名思义,Criteria是Hibernate的一套对象查询模式.但是它和HQL的本质是差不多的,也是通过配置文件来生成SQL语句. 所以不必过多的说了.
多态加载方面:
以上这些方法, 除了load方法的默认设置不支持多态加载之外,其他的形式都有一定程度上的支持. 但是表的结构一定要和映射文件中的一一对应才可以启用多态查询方式.
分享到:
相关推荐
尽管Criteria提供了更多的灵活性,但在多态加载方面,与HQL一样,只要表结构与映射文件匹配,就可以实现多态查询。 关于多态加载,这是Hibernate提供的一种高级特性,允许我们根据父类引用加载不同子类的对象。除了...
这样,在查询数据库时,Spring可以根据这个字段的值返回正确的子类实例。 ```java @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @TypeDiscriminator(column = "animal_type", values = { "DOG" ...
而HQL则弥补了这一不足,它是一种面向对象的查询语言,能够处理复杂的多态、关联查询,并减少SQL的冗余,适用于各种关系数据库。 二、Hibernate查询语言(HQL) 1. HQL基础:HQL基于面向对象的概念,将表映射为类,...
描述:“简明扼要地介绍了Hibernate中继承关系的映射方式,深入探讨了三种不同的映射策略及其优缺点,同时解析了多态查询的概念。” 知识点: ### Hibernate继承关系映射概述 在面向对象编程中,继承是核心概念之...
【Hibernate进行数据查询】 在Java开发中,Hibernate是一个流行的持久化框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本篇将详细阐述如何使用Hibernate进行数据查询,包括基本数据查询...
9. 高级特性:探讨Hibernate的高级功能,如关联映射、集合映射、继承映射、多态查询、懒加载和代理对象等。 10. 经典实例:书中提供的实战案例可以帮助读者将理论知识应用到实际项目中,加深理解和记忆。 通过阅读...
7. **多态性支持**:Hibernate支持多态查询,可以根据继承关系将子类对象一起查询出来,便于处理复杂的对象模型。 8. **延迟加载(Lazy Loading)**:Hibernate可以实现属性或关联关系的延迟加载,只有在真正需要时...
10. **多态性支持**:Hibernate支持多态查询,使得继承体系中的子类实体可以在同一个查询中处理,体现了面向对象设计的优势。 11. **级联操作**:在4.1.1.Final中,可以配置实体之间的级联操作,如级联保存、更新和...
9. **多态性支持**:Hibernate支持多态查询,可以在父类上执行查询,返回的结果可能包含不同子类的对象。 10. **批处理操作**:通过设置批处理大小,Hibernate可以优化批量插入、更新和删除的性能,减少与数据库的...
9. **多态性支持**:Hibernate支持多态查询,能够处理继承关系,允许在查询时返回父类或子类实例,增强了代码的灵活性。 10. **批处理**:通过设置批处理大小,可以批量执行SQL语句,提高数据库操作效率。 在实际...
10. **多态性支持**:Hibernate支持多态查询,允许在查询中使用继承层次结构中的任何类,使得代码更具扩展性。 11. **延迟加载(Lazy Loading)**:为了提高性能,Hibernate允许关联对象的延迟加载,只有当真正需要...
9. **多态和继承映射**:讲解如何处理类的继承关系,实现多态查询,包括单表继承、联合继承和表格派生。 10. **级联操作与代理**:阐述级联属性的使用,如何实现对象间的联动操作,以及Hibernate的动态代理机制。 ...
12. **实体继承和多态**:Hibernate支持单表继承、联合继承和表-per-hierarchy等多种继承策略,以及多态查询。 深入学习Hibernate源码,可以从底层了解其实现原理,包括查询优化、缓存机制、事务处理等,有助于...
11. **多态性支持**:Hibernate支持多态查询,可以在父类上定义查询,返回包含子类对象的结果集。 12. **延迟加载(Lazy Loading)**:通过懒加载机制,关联对象只在真正需要时才从数据库加载,减少内存消耗。 13....
10. **多态性支持**:Hibernate支持多态查询,使得在继承体系中处理对象更加便捷。 综上所述,Hibernate 4.3.7 Final版本不仅提供了强大的ORM功能,还优化了查询效率和内存管理,进一步增强了对JPA的支持,是Java...
HQL(Hibernate Query Language)是 Hibernate 中的一种强大的查询语言,它看起来很像 SQL,但是不要被语法结构上的相似所迷惑,HQL 是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态和关联之类的...
10. **多态性支持**: 在实体类间实现多态查询和存储。 11. **延迟加载(Lazy Loading)**: 非主动加载关联对象,直到实际使用时才加载,提高性能。 12. **实体状态**: Hibernate识别四种实体状态:瞬时、持久化、...