我們正在向我們的應用程序添加修訂歷史記錄,並且我們遇到了有關將檔案文檔嵌入到歷史對象中的一些問題。我們的狀態如下這樣:在morphia中帶有@Id的嵌入對象
@ToString
@EqualsAndHashCode
@Entity("bookOrder")
@Converters({DateTimeConverter.class, LocalDateConverter.class})
public class BookOrderState {
@Id
@Getter
private Long id;
@Indexed
@Getter
private final BookOrderStatus status;
@Getter private Long version;
...
和我們的歷史對象的樣子:
@ToString
@Entity("bookOrderHistory")
@Converters(DateTimeConverter.class)
public class BookOrderStateHistory {
@Id
@Getter
private String id;
@Getter
private DateTime createdDate;
@Getter
private BookOrderState bookOrder;
...
當我們更新我們從數據庫中抓取其當前狀態的訂單包裹它的歷史對象都有自己的ID和時間戳並將新的bookOrderStateHistory
和更新的bookOrderState
保存到數據庫。此過程可正確寫入,但在檢索時,我們最終會得到多個具有相同bookOrderState
的唯一歷史記錄對象。我們將其追溯到BookOrderState上的@Id
。由於許多歷史對象的狀態對象具有相同的_id
(但與對象的實際狀態有所不同),因此morphia似乎假定它們都應獲得相同的狀態對象。我們一起入侵了一種攔截嵌入式狀態對象的方法,並在寫入時將其_id
切換爲id
(並且在讀取時相反),但這種感覺不對。
Tl; dr:有一種簡單的方法可以防止當一個對象位於另一個文檔內時發生嗎啡嗎?