2013-09-18 21 views
1

Предполагая, что вы используете DB4O со стандартной конфигурацией и готовой версией - вы используете стандартную внутреннюю схему id DB4O, как показано ниже **.Обновление DB4o и вставка

Во-первых, как предположение, при обновлении или вставке объекта в базу данных программист имеет только один вариант, чтобы вызвать объект objectContainer.store (object) ".

Теперь, как DB4O знает, нужно ли обновлять существующий объект в БД или вставлять полностью новый? Я предполагаю, что DB4O пытается проверить, не является ли внутренний идентификатор объекта нулевым.

Однако я также мог видеть, что бремя лежит на программиста, чтобы сначала вытащить объект из БД, а затем обновить его. Итак, мой вопрос в том, как мы можем надежно обновлять объект в базе данных 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

ответ

1

db4o использует идентификатор объекта для того, чтобы решить, является ли для вставки/обновления объектов (и AFAIK это центральное понятие в db4o), поэтому, хотя это возможно, нет простого способа выполнить это на уровне db4o (вы умело иметь абстракцию для доступа к вашему уровню данных; что вы можете сделать, это иметь два метода в этом слое: вставка и обновление; в обновлении перед вызовом db4o.store() вы можете проверить, был ли объект уже загружен или нет. Таким образом, по крайней мере, вы можете избежать ошибок, которые могут привести к дублированию объектов в вашем db. Если вы делаете то же самое в вставке, вы можете быть уверены, что вы не будете обновлять объект по ошибке.

Надеюсь, что эта помощь.

+0

Спасибо Vagaus. Я думаю, что у меня будет только одно дополнительное логическое значение для одного объекта модели. Если я вытащил объект из базы данных, тогда save = true, если я создал объект в Java, save = false. Это может быть так просто. –

+0

Я понимаю вашу идею слоя абстракции, но проблема в том, что в основном у вас есть только один метод: i.e. store (object), поэтому все, что вы можете сделать, это убедиться, что вы храните * правильный * объект. И способ убедиться, что у вас есть правильный объект, мне кажется, чтобы отметить объекты, которые пришли из базы данных самостоятельно. Однако мне было бы интересно узнать, отмечает ли DB4O эти объекты с внутренним идентификатором. Поэтому я не уверен, что мне даже понадобится сохраненное логическое значение, просто проверьте, не является ли внутренний идентификатор нулевым или нет. –

+0

с этим сказал, не должен DB4O * знать *, что объект был загружен из БД, если его внутренний идентификатор не является нулевым ....? –

 Смежные вопросы

  • Нет связанных вопросов^_^