我有一个关于在例如 Java 中使用对象关系数据库的理论问题。我知道有类似 ORM(例如:Hibernate)的东西,它提供将数据库表映射到类,但我也可以通过 JDBC 进行操作(创建连接并通过 Java 执行 sql 查询)。有没有办法使用第二种方法(普通 JDBC 机制)在对象数据库中进行查询?感谢您的帮助,也许还有一些样品;)
4 回答
ORM are wrapper on top of SQL
. They are not rocket science. If you don't prefer Object Query Languagues (like HQL
), yes you can do plain SQL
queries (for sure in Hibernate
using method createSQLQuery(...))
EDIT:
Based on Ricardo comment, if you are looking for SQL on object database, AFAIK, I don't think there is any support at this moment.
我发现了一些可能与 Caro2 所要求的内容有关的东西,不幸的是,它与对象数据库无关,而是与一个名为 Neo4J 的图形数据库有关。
该特定图形数据库具有JDBC 驱动程序,该驱动程序通过 JDBC 接口接受 Cypher 查询(Neo4J 图形查询语言之一)。它允许您查询图形数据库,而不是使用 SQL,而是使用它自己的查询语言。它支持 JDBC API,例如 executeQuery 和 executeUpdate 方法,并允许您导航 ResultSet 等。
所以这意味着面向对象的数据库可以有JDBC驱动,只要开发者能够将面向对象的查询语言与JDBC API相匹配。然后可以使用 JDBC 直接查询 OODB,使用其 JDBC 驱动程序将查询/更新/删除命令置于 OO 查询语言语法中。
有真正的面向对象的数据库,称为对象存储。将它们视为通常驻留在内存中的类的持久存储。如果这就是您所说的“是否有任何方法可以使用第二种方法在对象数据库中进行查询”,那么答案是否定的。
由于多种原因,真正的对象存储无法支持 SQL 查询。
对象中的数据是封装的,因此选择对象的内部数据字段变得很麻烦,并且受制于公开的封装规则(公共、私有、受保护、包保护)。
对象存储中的数据是相互连接的,因为它们的引用也原封不动地存储。因此,“选择”一个对象会为您提供它直接和间接引用的整个对象网络。
对象关系查询语言更类似于可以转换为 SQL 查询的类对象语法。这意味着对象关系查询语言不是对象存储的 SQL 模拟。对象存储直接支持不同的查询语言,使用对象查询语言在提取数据方面没有比使用 SQL 查询更大的用处。
不幸的是,我不知道对象存储的标准查询语言。也许有一个,但对象存储很少使用,如果它是“一堆'标准'争取成为一个真正的标准”,我不会感到惊讶。即使使用 SQL,该标准的定义也相当松散,更像是“一堆共享基本语法结构的方言”。
我认为您不能使用 JDBC 访问纯面向对象的数据库。并非没有将 SQL 转换为对象查询语言的驱动程序(即,与 ORM 框架所做的相反)。