Java十分的提倡面向对象,那么我们利用hibernate是如何的实现多态呢,hibernate提供三种方法:
1、 所有的子类重复父类的配置
2、 以父类为名字建立一个表,表中包含有它所有的子类的信息(如果某个子类中没有其它子类的字段,则填充值的时候设置为空即可),需要在配置文件中配置子类的标识。
3、 用连接标签,即父类、子类分开配置,通过外键链接。
代码见证:
1.每个子类单独配置:
这个我觉得没有必要代码实例了,因为我们一直都采用的是这种方式(所有的类都继承自Object,只不过Object中不含有java Bean,所以没有增加新的属性字段)。
2.将所有的子类融合到一个表中:
继承内容就不表述了,关键是配置文件:
<!-- 指定子类标识字段的列名,并且它的位置不能位于父类其他属性配置之后 -->
<discriminator column="child" />
<property name="address" type="string" />
<!-- subclass标签配置子类信息,需要指定子类名以及标识值 -->
<subclass name="com.dong.model.Child2" discriminator-value="c2">
<!-- 填写子类中特有的信息 -->
<property name="age" type="integer" />
</subclass>
<subclass name="com.dong.model.Child1" discriminator-value="c1">
<property name="name" type="string" />
</subclass>
3.通过链接实现继承
同样,关键是配置文件:
<property name="address" type="string" />
<!-- 指定子类名字,以及子类的表名 -->
<joined-subclass name="com.dong.model.Child1" table="c1">
<!-- 指定子类的外键列,同时他也是该表的主键 -->
<key column="pid" />
<property name="name" type="string" />
</joined-subclass>
<joined-subclass name="com.dong.model.Child2" table="c2">
<key column="pid" />
<property name="age" type="integer" />
</joined-subclass>
很容易看出:第一种方法子类单独写到一个表中,那么所有公有的信息都必须在每个子类中写一遍,产生空间的浪费;第二种方法将子类、父类所有的信息融合到一个表中,那么也会造成空间的浪费,因为某些子类不具有其它子类的某些属性(注意,如果某两个子类具有一些相同的属性名时,hibernate会将以先配置的属性为主,例如:c1有一个string 类型的name,c2有一个char类型的name,那么hibernate就会将c1中的name为准写到表中,原因很明显一个表中不能有两个相同名字的列);第三种方法需要用到链接,这样也会浪费时间、空间。
总之这三种方法都有自己的缺点,也有自己的优点,需要根据实际操作的表的属性个数、表与表之间的关系进行确定选择哪种方式。
分享到:
相关推荐
- 多态:主要体现在方法重写(Override)和方法重载(Overload)。 3. **Java中的面向对象编程** - **类定义**:使用class关键字定义类,包括属性(成员变量)和方法(成员函数)。 - **对象创建**:通过new...
**三大框架**:在实习过程中,实习生可能接触了Java开发中的三大框架——Struts、Hibernate和Spring。Struts 2提供了基于拦截器的请求处理机制,使得业务逻辑与Servlet API解耦;Hibernate是一个对象关系映射(ORM)...
首先,Java作为面向对象的语言,其核心概念如类、对象、封装、继承和多态都在系统设计中得到体现。超市商品管理系统中,可以创建商品类(Product),包含商品ID、名称、价格等属性,以及库存管理、销售记录等相关...
2. **面向对象**:Java是完全面向对象的语言,三大特性——封装、继承和多态是其核心。封装通过访问修饰符实现数据保护,继承则允许类之间的层次结构,多态则为程序提供了更大的灵活性。 3. **类与对象**:类是对象...
该系统分为三个不同版本——Sms2.0、Sms和sms3.0,分别代表了功能的逐步完善和提升,对于学习和理解Java后端开发以及Oracle数据库应用具有很高的参考价值。 首先,Oracle数据库作为全球广泛使用的大型关系型数据库...
【标题】:“30000字毕业论文”——基于Java技术的毕设研究 【内容】: 在高等教育阶段,毕业论文(graduation study)是学生们必须经历的一个重要环节,它旨在通过独立的科学研究,训练学生的学术研究能力、分析...
【清华大学JAVA教程】是一份由清华大学编撰的权威性JAVA编程教学资料,旨在深入浅出地教授Java语言的基础知识,并且特别关注了Web开发中的重要技术——JSP(JavaServer Pages)和Servlet。这份教程不仅是初学者入门...
在这个系统中,Java的基础知识如类、对象、接口、继承、封装和多态等概念会得到体现,这些都是理解Java编程的核心。 2. **MVC设计模式**:书城管理系统可能采用了Model-View-Controller(模型-视图-控制器)架构,...
3. 多态:不同的商品类可能需要覆盖基类中的一些方法,以实现各自特定的行为,这就是多态性的体现。 4. 封装:通过类和对象,我们可以隐藏内部实现细节,只暴露必要的接口给外部使用,这样可以提高代码的安全性和可...
《Java面向对象设计——图书管理系统》 在编程领域,Java是一种广泛应用的面向对象语言,尤其在企业级应用开发中占据重要地位。本项目"LibrarySwing.7z"是一个使用Java Swing库构建的图书管理系统,它涵盖了面向...
如果`Animal`类不区分生物的生存环境,那么`Terrestrial`可能作为一个接口或抽象类,定义了陆地生物特有的行为,如`digHole`或`hibernate`。`Cat`和`Duck`等陆生动物类可以实现或继承这个接口/抽象类。 通过这个...
- **跨平台性:** “一次编写,到处运行”的口号体现了Java的平台无关性。 - **高性能:** 利用JIT编译器提高执行效率。 #### JDK安装与配置 - **JDK(Java Development Kit)简介:** - 包含JRE(Java Runtime ...
【描述】"Samplelq_java_pinek7w_源码" 这个描述简洁明了,直接指出了内容的核心——源代码。这表明我们无需期待任何文档或注释,而是需要直接通过阅读代码来理解它的功能和实现逻辑。在实际开发中,源码的阅读和...
理解面向对象编程的三大特性——封装、继承和多态也至关重要。 2. **异常处理**:掌握如何使用try-catch-finally语句块进行异常处理,理解Checked和Unchecked异常的区别,以及何时使用throw和throws关键字。 3. **...
- **简单性**:Java的设计理念之一就是“简单”,这体现在其语法结构简洁明了,易于学习和理解。 - **面向对象**:Java完全支持面向对象编程范式,包括封装、继承和多态等核心概念。 - **平台无关性**:Java代码可以...
同时,Java中的面向对象编程原则,如封装、继承和多态,也会在这个项目中得到体现。 标签中提及"Java",这提示我们关注Java语言特性在项目中的应用。Java以其跨平台性、丰富的库支持和强大的社区而闻名。在"survey_...
《MovieSearchApp——Java开发深度解析》 "MovieSearchApp"是一个典型的Java应用程序,它可能是一个专注于电影搜索的移动或桌面应用。在这个项目中,Java的强大功能和灵活性得到了充分的体现。下面,我们将深入探讨...
二手船特许公司"这个项目标题表明它是一个关于运用编程方法论来解决特定业务场景——二手船特许公司的案例。在这个项目中,我们可能涉及到一系列与Java相关的技术栈和最佳实践,因为"Java"是给定的标签。 首先,...
在这个压缩包中,包含三个源代码文件——Lab03_1.java、Lab03_2.java和Lab03_3.java,这些都是学习和实践Java编程的基础练习。 Java语言由Sun Microsystems(现为Oracle Corporation的一部分)于1995年发布,它的...
多态则是子类可以替换父类使用,体现为方法的重写和重载。 5. **接口**:Java接口是完全抽象的类,仅包含常量和抽象方法。它可以实现多继承,增强代码的灵活性和可扩展性。 **Java开发环境:** 1. **JDK(Java ...