Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 通常的ORM解决方案能否与OO数据库交互?_Hibernate_Orm_Couchdb_Object Oriented Database - Fatal编程技术网

Hibernate 通常的ORM解决方案能否与OO数据库交互?

Hibernate 通常的ORM解决方案能否与OO数据库交互?,hibernate,orm,couchdb,object-oriented-database,Hibernate,Orm,Couchdb,Object Oriented Database,例如,Hibernate可以处理CouchDb吗 其他ORM解决方案中对其他OO数据库的支持如何 ORM解决方案的一个(不太重要)好处是可以将一个数据库供应商替换为另一个数据库供应商。如果将关系数据库替换为面向对象的数据库会怎么样?我的理解(这里“可能错误”的常见警告)是,ORM解决方案不适用于面向对象数据库,因为OO数据库不再需要ORM解决方案 通常,ORM用于帮助抽象关系模型,并将关系模型与面向对象系统的不匹配从代码逻辑中抽象出来。它还允许使用传统数据库,这些数据库通常是遗留系统继续工作所必

例如,Hibernate可以处理CouchDb吗


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

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

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

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

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

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

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);
}
包持久化;
导入java.io.Serializable;
导入java.util.List;
公共接口通用DAO
{
T-find(K-id);
列表查找();
列表查找(T示例);
K保存(T实例);
void更新(T实例);
无效删除(T实例);
}
“其他ORM解决方案中对其他OO数据库的支持如何?”

对象关系映射(ORM)就是这个问题的解决方案

  • 程序中的对象

  • 关系数据库

  • 除非您同时拥有这两个部分(OO程序、关系数据库),否则无法使用ORM,因为您没有问题

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

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

    没有必要在OODB中使用ORM。没有问题要解决

    如果将关系数据库交换为面向对象的数据库会怎么样

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


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

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


    从仅仅使用JSON序列化对象到将它们推送到任何NoSQL数据库,再聪明到可以使用JSON作为存储格式,ORM是一个倒退。

    如果ORM解决方案旨在将对象模型映射到关系数据库,那么为什么要更改对象模型?您不必编写对象模型来处理关系概念,这不是重点吗?我不确定“更改对象模型”是什么意思-除非数据库发生更改,否则我们不会更改对象模型(在这一点上,我们必须更改或更新以符合新的要求)。如果您指的是面向对象数据库与关系数据库,考虑到我理解它们在其中工作的完全范例,我认为如果您要在它们之间进行更改,您应该重新考虑数据的持久性和内部表示。“您不能使用ORM,因为您没有问题。”我喜欢那部分+1.