0

我有一种情况,我想在 Java 应用程序中(例如在 Eclipse 上)执行一些与 DB 相关的操作。我使用 MySQL 作为 RDBMS,使用 Hibernate 作为 ORM 提供程序。

  1. 我使用 Java 中的嵌入式 SQL 检索所有记录:

//定义连接...等

ResultSet 结果 = myStmt.executeQuery("SELECT * FROM employees");

// 迭代器

  1. 我使用 Hibernate ORM / JPQL 检索所有记录:

// 连接,实体管理器....等

列表结果 = em.createQuery("SELECT emp FROM Employees emp").getResultList();

// 迭代器

我知道 RDMS 位于辅助内存 (DISK) 上。问题是,当我得到两个结果时。员工实际上在哪里?在辅助 (SM) 或主内存 (MM) 上?

我想最后有两个对象群进行进一步测试,一个在 SM 上运行,一个在 MM 上运行?这怎么可能?

谢谢

坦率

4

1 回答 1

0

你的 Java 对象是真正的 Java 对象,它们在(用你的术语)MM 中,至少有一段时间。Hbernate/JPA 编程模型的美妙之处在于,在 MM 中,您几乎可以将对象视为任何其他 Java 对象,对它们进行一些更改等。然后在某个约定的时间,Hibernate 的持久性机制让它们晒太阳至,SM(磁盘)。

您需要阅读 Sessions 和 Transactions 的含义,以便了解 MM 和 SM 之间的转换何时发生,以及非常重要的是,如果两个用户想要同时处理相同的数据会发生什么。

也许从这里开始

也可以在 MM 中创建(至少目前)与磁盘上的任何数据无关的对象——这些是“瞬态”对象,也可以将内存中的数据与磁盘上的数据“断开”。

我的底线是,Hibernate/JPA 确实从持久性编码中消除了许多繁重的工作,但它无法隐藏规模的复杂性,因为您的数据量增加,数据模型的复杂性增加并且您的用户的操作争夺您需要认真做的数据思维。Hibernate 可以让你实现好东西,但它不能为你做这样的想法,你必须仔细选择,因为你的问题域变得更加复杂。

于 2009-07-12T20:33:35.807 回答