我们正在向我们的应用程序添加修订历史记录,并且在将归档文档嵌入我们的历史记录对象时遇到了一些问题。我们的状态是这样的:
@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
. 我们将其追溯到@Id
BookOrderState 上。由于许多历史对象将具有相同的状态对象_id
(但对象的实际状态有所不同),吗啡似乎假设它们都应该获得相同的状态对象。我们已经一起破解了一种方法来拦截嵌入的状态对象并将其切换_id
到仅id
在写入时(以及在读取时相反的方式),但这感觉是错误的。
Tl; 博士:有没有一种简单的方法可以防止 morphiaid -> _id
在另一个文档中时对对象进行操作?