如何ORM在幕后工作?还什么是在Java的持久对象的最佳方式?
题
如何ORM工作?是对象序列化到BLOB的?
在Java中,是JDO仍去这样做的方法是什么?可还有什么?似乎有很多EJB,直接对象序列,和JDO。
的通话的解决方案
要回答你的第一个问题,这里是休眠>,即表示,存在实现ORM各种方式:
<强>纯关系强>
在整个申请中,包括在 用户界面,设计时采用了 基于SQL的关系模型 关系操作。这种方法, 尽管它的不足之处为大 系统中,可以是一个很好的解决方案 对于简单的应用,其中低 代码重用的水平是可以容忍的。 直接SQL可以微调,每 方面,但缺点,如 缺乏可移植性和 可维护性,是显著, 尤其是从长远来看。 此类别的应用往往 大量使用存储过程, 移的一些工作出来的 业务层和数据库中。
<强>轻型对象映射强>
实体被表示为类 被手动地映射到 关系表。手工编码的SQL / JDBC 从业务逻辑隐藏 使用公知的设计模式。 这种做法是非常广泛 并成功的应用 用少量的实体,或 与一般的应用, 元数据驱动的数据模型。存储 程序可能在这种地方 类型的应用程序。
<强>中的对象映射强>
在应用程序被设计围绕 对象模型。 SQL是在产生 使用代码生成建立时间 工具,或在由框架代码运行。 对象之间的关联是 通过持久性支持 机构,和查询可以是 使用指定的面向对象的 表达式语言。对象是 由持久层高速缓存。一种 许多伟大的ORM产品和自产自销 持久层支持至少 这一级别的功能。很好 适合于中型的应用 一些复杂的交易, 特别是当之间的可移植性 不同的数据库产品是 重要。通常这些应用程序 不使用存储过程。
展开对象映射强>
完整对象映射支持 复杂的对象建模: 组合物,继承, 多态和“余辉 可达性。”持久层 实现透明的持久性; 持久化类没有继承任何 特殊的基类或有 实现一个特殊的接口。 高效的抓取策略(懒惰 和预先抓取)和缓存 战略的实施 透明的应用程序。这个 功能级别难言 通过自主开发的持久性实现 层,这相当于数月或数 年的发展时间。一个号码 商业和开源的Java ORM 工具已经实现了这个级别的 质量。这个水平符合 我们使用这个ORM的定义 书。让我们来看看这些问题,我们 希望通过工具来解决这 达到完全对象的映射。
其他提示
ORM =对象关系映射,对象的属性映射到列在realational数据库。该映射是任意的,这样做才能斑点,在实践中什么是最有用趋于自然映射 - 字符串到VARCHAR处理,诠释成整数等
JPA是寻找用于ORM一个标准的地方。 JPA代替EJB CMP方法,这被认为是累赘。 JPA允许你表达的映射作为Java注解,并且还允许在configutration文件进行指定的映射,支撑MULTIP [乐当数据库后者可能是有用的。
JPA具有查询语言,这样就可以构造查询针对对象的属性。
JPA由主要应用服务器厂商的支持并且还通过产品,如休眠。
我发现JPA相当不错的比EJB CMP的工作,更是这样。
我会建议仍在使用事务mamangement和安全EJB会话Bean的门面 - 基于注解的方法使EJB 3的办法的更容易比EJB 2使用,最小的编码开销
JDO实际上是标准的ORM太,和提供比JPA(1 + 2)的更完整的规范。 JPQL是RDBMS的概念,因此模仿SQL更集中。 JDOQL遵循Java语法,因此基于多个对象。取决于您的应用是否曾考虑从RDBMS走开。如果是这样那么JPA是不是要走的路。如果仅是为了RDBMS然后JPA绝对是一个考虑因素。
无论对象被序列化为BLOB的视配置。你可以这样做,对于复杂的对象类型,如果你愿意的话,但他们不会是可查询的。如果你代替天然形式坚持他们,那么你还可以查询他们,导致更有效的应用程序。
- 安迪(DataNucleus将 - JDO和JPA持久性)