例如,Hibernate可以处理CouchDb吗?
如何支持其他ORM解决方案中的其他OO数据库?
ORM解决方案的一个(不那么重要的)好处是可以将一个数据库供应商换成另一个数据库供应商。如果将关系数据库交换为面向对象的数据库会怎样?
答案 0 :(得分:5)
“在其他ORM解决方案中支持其他OO数据库怎么样?”
对象关系映射(ORM)是解决此问题的方法。
程序中的对象。
关系数据库。
除非你有两个部分(OO程序,关系数据库),否则你不能使用ORM,因为你没有问题。
如果您正在编写C程序,则无法使用ORM - 您没有任何要映射的对象。
如果您没有使用关系数据库,则无法使用ORM - 您没有任何关系数据库可以映射到。
OODB不需要ORM。没有问题需要解决。
答案 1 :(得分:3)
我的理解(这里常见的“可能是错误的”)是ORM解决方案不适用于面向对象的数据库,因为OO数据库不需要ORM解决方案。
通常,ORM用于帮助抽象关系模型,并从代码逻辑中抽象出关系模型与面向对象系统的不匹配。它还允许使用传统系统继续工作所需的传统数据库,但您可以自由地以OO方式处理关系。
抽象是使用ORM的真正好处,即imo。交换数据库供应商并不像有些人那么容易,特别是你是从Oracle转换到数据库,在那里有许多自定义操作和JDBC驱动程序中的自定义行为。
您的问题的另一个要素是,您不太可能希望将关系数据库中的相同基线数据库模型用于面向对象的数据库。我认为,如果不需要,这种范式转换会建议重新考虑底层核心系统的逻辑和连接行为。
答案 2 :(得分:2)
如果将关系数据库交换为面向对象的数据库怎么办?
我认为这应该可以通过JDO实现。实际上,在我的记忆中,OODMBS供应商对JDO进行了详细阐述和推广,我认为这个标准是一种与OODBMS交互的统一方式(总体规划分两步:首先,亲爱的客户,使用我的JDO执行持久性然后亲爱的客户,用我的Versant数据库替换您的Oracle / Sybase / Whatever数据库。
但是我不会将JDO定义为“ORM”,它更像是一个透明的对象持久性标准(当存储系统是关系时 - 可以作为ORM工具 - ORM中的R - 数据库)。
答案 3 :(得分: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);
}
答案 4 :(得分:0)
使用JSON,根据您的语言,使用类实例更容易。
恕我直言,只需使用JSON序列化对象并将它们推送到任何足够聪明的NoSQL数据库,使用JSON作为其存储格式,ORM就会倒退一步。