Можно ли просто обновить все поля в Mongo с помощью Morphia?

Мы сопоставляем Монго с Морфией. В Morphia реализовано множество оптимизаций, позволяющих применять обновления в документе только к изменившимся полям.

Это ценно, но в данный момент мне нужен неоптимизированный корпус. Я просто хочу сохранить объект и не беспокоиться о том, какие поля изменились.

Конечно, я могу просто вызвать save(), но это вызовет методы жизненного цикла, как если бы я создавал новый объект.

Возможно, это и есть ответ: save() и мои методы жизненного цикла должны быть достаточно умными, чтобы определить, что это «повторное сохранение», а не создание нового объекта.

Если есть лучший подход, я, безусловно, был бы признателен, если бы услышал об этом.


person Andy Davis    schedule 02.03.2012    source источник
comment
Из интереса: почему такая проблема вызывает вызов методов жизненного цикла?   -  person xeraa    schedule 03.03.2012
comment
Это не. Однако каждый раз, когда я начинаю работать с фреймворком, я стараюсь убедиться, что использую его правильно.   -  person Andy Davis    schedule 03.03.2012


Ответы (1)


Мой преперсист выглядит примерно так:

@PrePersist
public void prePersist() {
    creationDate = (creationDate == null) ? new Date() : creationDate;
    lastChange = (lastChange == null) ? creationDate : new Date();
}

Если вы хотите проверить, была ли уже сохранена сущность, я бы, вероятно, проверил id на наличие нулевых значений, поскольку она автоматически генерируется при первом сохранении.

person xeraa    schedule 03.03.2012
comment
Есть несколько возможных решений, это определенно одно из них. Я думаю, что общий ответ - сохранить и обнаружить повторное сохранение. Спасибо за помощь. - person Andy Davis; 04.03.2012