Hibernate典型的映射关系
1. Class <-> Table
一个Class一般可以映射为一个Table,一个Class的实例对应Table的一行数据。但是,一个Table中的每行数据,一般都需要有一个主键来唯一标识这行数据,而一个Class的每个实例,则不一定需要一个唯一标识。
2. Property <-> Field
一个Class的Property一般可以直接映射为Table的一个Field。但是,他们的数据类型不一定直接匹配。如果他们代表的数据类型的语义上可转换,则Field的类型,应大于等于Property的数据类型。如果他们代表的类型语义上不可转换,则需要在应用程序层面,进行自定义的转换。
这种映射太狭隘了,它要求:R是固定的,而O和M是相关的,即映射关系是预先定义好的,因此类和表结构是按照映射关系对应起来的,这样是不是太死板了,相应地导致了维护的复杂性
但是,我认为广义的ORM应该是:O是独立,M也是独立的,而R是可变的,即类和表结构是独立存在的,它们之间通过动态的映射关系进行关联起来,这样无论是类结构变化,还是表结构变化,或者两者全部变化,我们只需要动态调节映射关系就可以了
举个简单的例子:
Hibernate要求BO类与表结构一一对应,无论是改表结构还是改类,另一方都要进行相应的变化,维护起来何其麻烦,需要开发人员与DBA进行更多地协调工作
而且我们进行数据库查询的时候,往往也不是查询某一张表,复杂的业务逻辑往往是需要我们进行多表关联然后取其中几个字段而已
我们的类的定义往往是按照业务逻辑来划分的,而数据库表结构则考虑更多的是数据的共享和冗余,关注点经常不是一致的,这种情况下,我们不但需要建立诸多和表结构一致的类,还要再自定义和逻辑相关的类,然后不断地从各个BO对象中拷贝属性到一个业务逻辑类,这些无聊的重复的工作无疑增加了工作量,而且产生不了效率
而理想的情况下是,后台表结构按照最合适的方式存储,而应用程序根据业务逻辑抽取出数据字段映射到我们的业务逻辑类,完全没有必要类和表一一对应,除非某个表恰好构成了我们的一个业务逻辑,这样我们定义这么一个和表结构相同的类,但这也仅仅是巧合,以后需求变更了,表结构和类都可以各自独立的变化,没有相互约束
ORM就是对象和数据的映射,这种映射可以是静态的,也可以是动态的,可以是预先定义好的,也可以根据需求自动生成的,就目前我看来,Hibernate大抵属于前者,这也许就是某些人不喜欢它的原因吧
Hibernate完全就是狭隘化了的ORM,却被一些人奉若圭臬~
分享到:
相关推荐
Hibernate框架ORM的实现原理.doc
hibernate-orm-master
hibernate源码
从hibernate官网下载的hibernate-orm-4.3.9的源代码
基于ORM模型的物资管理系统的设计和实现,任钢,,本文提出了一种基于.NET平台的实现对象和关系数据库的转化的ORM模型。在分析.NET平台的数据库处理的技术基础上,本文设计了一个对象/
hibernate-orm-3.2.zip
Hibernate源码(hibernate-orm-main.zip)Source Code: Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。 它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。
以前全是手动写代码。以前自学ssh架构的时候还不知道Hibernate3能够根据数据库中的表自动生成相应的代码,今天看书时...他可以帮助我们更加深刻得了解Hibernate的持久化与ORM的原理及其实现。适合有一定基础的人学习。
基于ORM模型的物资管理系统的设计和实现
hibernate-orm-5.0源代码,是刚才github官网:https://github.com/hibernate/hibernate-orm 下载的最新hibernate-orm-5.0。
本资源来自hibernate官网 http://hibernate.org/ 方便大家使用。 源码
Hibernate orm 实现原理 主要讲解了关于hibernate 的一些知识
python利用元类和描述器实现ORM模型(csdn)————程序
对象关系映射的概念,及相应Hibernate的使用规范,同时通过实例展示到底什么是对象关系映射。
hibernate framework jar zip
hibernate-orm.zip
hibernate5+jar包,基本上是比较新的了。ORM框架的首选/
高级Hibernate4开发技术:ORM思想,hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,...
高级Hibernate4开发技术:ORM思想,hibernate介绍,hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,...