【问题标题】:Mapping in relational-object database关系对象数据库中的映射
【发布时间】:2013-10-22 17:38:22
【问题描述】:

我有一个关于在例如 Java 中使用对象关系数据库的理论问题。我知道有类似 ORM(例如:Hibernate)的东西,它提供将数据库表映射到类,但我也可以通过 JDBC 进行操作(创建连接并通过 Java 执行 sql 查询)。有没有办法使用第二种方法(普通 JDBC 机制)在对象数据库中进行查询? 感谢您的帮助,也许还有一些样本;)

【问题讨论】:

    标签: java database jdbc object-relational-model


    【解决方案1】:

    ORM 是SQL 之上的包装器。它们不是火箭科学。如果您不喜欢对象查询语言(如HQL),是的,您可以进行简单的SQL 查询(肯定在Hibernate 中使用方法createSQLQuery(...)

    编辑:

    根据 Ricardo 的评论,如果您正在寻找对象数据库上的 SQL,AFAIK,我认为目前没有任何支持。

    【讨论】:

    • 我认为 Caro2 的意思是是否可以使用 JDBC 查询 OBJECT 数据库,而不是是否可以使用 JDBC 查询 RELATIONAL 数据库。
    【解决方案2】:

    我认为您不能使用 JDBC 访问纯面向对象的数据库。并非没有将 SQL 转换为对象查询语言的驱动程序(即,与 ORM 框架的作用相反)。

    【讨论】:

      【解决方案3】:

      有真正的面向对象的数据库,称为对象存储。将它们视为通常驻留在内存中的类的持久存储。如果这就是您所说的“有没有办法使用第二种方法在对象数据库中进行查询”,那么答案是否定的。

      True Object Stores 不支持 SQL 查询的原因有很多。

      1. 对象中的数据是封装的,因此选择对象的内部数据字段变得很麻烦,并且受制于公开的封装规则(公共、私有、受保护、包保护)。

      2. 对象存储中的数据是连接的,因为它们的引用也被完整地存储。因此,“选择”一个对象会为您提供它直接和间接引用的整个对象网络。

      3. 对象关系查询语言更类似于可转换为 SQL 查询的类对象语法。这意味着对象关系查询语言不是对象存储的 SQL 模拟。对象存储直接支持不同的查询语言,使用对象查询语言在提取数据方面并没有比使用 SQL 查询更大的用处。

      不幸的是,我不知道对象存储的标准查询语言。也许有一个,但对象存储的使用频率很低,如果它是“一堆'标准'争取成为一个真正的标准”,我不会感到惊讶。即使使用 SQL,该标准的定义也相当松散,更像是“一堆共享基本语法结构的方言”。

      【讨论】:

        【解决方案4】:

        我发现了一些可能与 Caro2 所要求的内容有关的东西,不幸的是,与对象数据库无关,而是与一个名为 Neo4J 的图形数据库有关。

        该特定图形数据库有一个JDBC driver,它通过 JDBC 接口接受 Cypher 查询(Neo4J 图形查询语言之一)。它允许您查询图形数据库,而不是使用 SQL,而是使用它自己的查询语言。它支持 JDBC API,例如 executeQuery 和 executeUpdate 方法,并允许您导航 ResultSet 等。

        所以这意味着面向对象的数据库可以有 JDBC 驱动程序,只要开发人员可以将面向对象的查询语言与 JDBC API 相匹配。然后可以直接使用 JDBC 查询 OODB,将查询/更新/删除命令置于 OO 查询语言语法中,使用其 JDBC 驱动程序。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-02-14
          • 2011-04-24
          • 2016-06-12
          • 2011-11-05
          • 1970-01-01
          • 2022-12-10
          相关资源
          最近更新 更多