假设您正在使用具有标准配置和开箱即用的DB4O,这意味着您正在使用DB4O的标准内部ID方案,如下所示**。
首先,作为假设,当将对象更新或插入数据库时,程序员只有一个选项,称为“objectContainer.store(object)”。
现在,DB4O如何知道是更新数据库中的现有对象,还是插入一个全新的对象?我的猜测是,DB4O会查看对象的内部id是否为空。
但是,我还可以看到程序员首先从数据库中提取对象,然后更新它的负担。 所以我的问题是,如何在不首先将其拖入Java内存的情况下可靠地更新DB4O数据库中的对象?
*这篇DB4O文章并没有真正回答我的问题
**这是非常有用的信息:
答案 0 :(得分:1)
db4o使用对象标识来决定是否插入/更新对象(而AFAIK这是db4o中的一个核心概念)所以即使有可能,也没有简单的方法可以在db4o级别完成(你可能有您的数据层访问的抽象;您可以做的是在此层中有两个方法:insert和update;在update中,在调用db4o.store()之前,您可以检查对象是否已经加载。至少你可以避免在你的数据库中导致对象重复的错误。如果你在插入中做同样的事情,你可以确定你不会错误地更新对象。
希望得到这个帮助。