1

假设您正在使用带有标准配置和开箱即用的 DB4O - 这意味着您正在使用 DB4O 的标准内部 id 方案,如下所示**。

首先,作为一个假设,当更新或插入一个对象到数据库中时,程序员只有一个选择,调用“objectContainer.store(object)”。

现在,DB4O 如何知道是更新数据库中的现有对象,还是插入一个全新的对象?我的猜测是 DB4O 会查看对象的内部 id 是否不为空。

但是,我也可以看到程序员有可能首先从数据库中提取对象,然后更新它。所以我的问题是,我们如何才能可靠地更新 DB4O 数据库中的对象,而无需先将其拉入 Java 内存?

*这篇 DB4O 文章并没有真正回答我的问题

http://community.versant.com/Documentation/Reference/db4o-8.1/java/reference/Content/basics/update_concept.htm

**这是非常有用的:

http://community.versant.com/documentation/Reference/db4o-8.1/java/reference/Content/platform_specific_issues/disconnected_objects/comparison_of_ids.htm

4

1 回答 1

1

db4o 使用对象标识来决定是否插入/更新对象(AFAIK 这是 db4o 中的一个中心概念),因此,即使有可能,也没有简单的方法可以在 db4o 级别实现(您可能对你的数据层访问;你可以做的是在这一层有两个方法:插入和更新;在更新中,在调用db4o.store()之前,你可以检查对象是否已经加载。这样,在至少你可以避免在你的数据库中导致对象重复的错误。如果你在插入中做同样的事情,你可以确保你不会错误地更新一个对象。

希望这有帮助。

于 2013-09-19T09:29:39.227 回答