2

例如,Hibernate 可以处理 CouchDb 吗?

其他 ORM 解决方案对其他 OO 数据库的支持如何?

ORM 解决方案的一个(不是那么重要的)好处是可以将一个数据库供应商换成另一个供应商。如果将关系数据库换成面向对象的数据库会怎样?

4

5 回答 5

5

“其他 ORM 解决方案对其他 OO 数据库的支持如何?”

对象关系映射 (ORM) 是解决此问题的一种方法。

  1. 程序中的对象。

  2. 关系数据库。

除非你有两个部分(OO 程序,关系数据库),否则你不能使用 ORM,因为你没有问题。

如果您正在编写 C 程序,则不能使用 ORM——您没有要映射的对象。

如果你不使用关系数据库,你就不能使用 ORM——你没有任何关系数据库可以映射到。

OODB 不需要 ORM。没有问题要解决。

于 2010-01-30T18:36:09.060 回答
3

我的理解(这里通常警告“可能是错误的”)是 ORM 解决方案不适用于面向对象的数据库,因为 OO 数据库不需要 ORM 解决方案。

通常,ORM 用于帮助抽象关系模型,并从代码的逻辑中抽象出关系模型与面向对象系统的不匹配。它还允许使用遗留系统继续工作通常需要的传统数据库,但让您可以自由地以 OO 方式处理关系。

抽象是使用 ORM 的真正好处,imo。交换数据库供应商并不像某些人想象的那么容易,尤其是当您从或切换到像 Oracle 之类的数据库时,在 JDBC 驱动程序中有许多自定义操作和自定义行为。

您的问题的另一个要素是,您不太可能希望使用从关系数据库到面向对象数据库的相同基线数据库模型。我认为这种范式转变会建议(如果不需要的话)重新思考底层核心系统的逻辑和连接行为。

于 2010-01-30T18:04:57.523 回答
2

如果将关系数据库换成面向对象的数据库会怎样?

我认为这应该可以通过 JDO 实现。实际上,在我的记忆中,JDO 是由 OODMBS 供应商精心设计和推广的,我认为这个标准是一种与 OODBMS 交互的统一方式(总体规划分为两步:首先,亲爱的客户,使用我的 JDO 实现进行持久化然后亲爱的客户,用我的 Versant 数据库替换您的 Oracle/Sybase/Whatever 数据库)。

但是我不会将 JDO 定义为“ORM”,它更像是一个透明的对象持久性标准(当存储系统是关系时可以充当 ORM 工具 - ORM 中的 R - 数据库)。

于 2010-01-30T18:41:37.700 回答
1

“ORM”中的“R”代表“关系”,所以我认为它们根本不适用于 ODBMS。

使用对象数据库的全部意义在于能够持久化对象。如果你有它们,你需要映射什么?

我认为您正在谈论的那种交换是通过具有与实现无关的持久性接口来完成的。如果你能做到这一点,你可以换掉关系数据库和对象数据库。也许是这样的:

package persistence;

import java.io.Serializable;
import java.util.List;

public interface GenericDao<T, K extends Serializable>
{
    T find(K id);
    List<T> find();
    List<T> find(T example);

    K save(T instance);
    void update(T instance);
    void delete(T instance);
}
于 2010-01-30T18:34:07.073 回答
0

根据您的语言,使用 JSON 比使用类实例更容易。

恕我直言,ORM 是从仅使用 JSON 序列化对象并将它们推送到任何足够智能以使用 JSON 作为其存储格式的 NoSQL 数据库的倒退。

于 2010-02-02T17:25:09.623 回答