アプリにリビジョン履歴を追加していますが、履歴オブジェクトにアーカイブ ドキュメントを埋め込む際に問題が発生しています。私たちの状態は次のようになります。
@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;dr:id -> _id
オブジェクトが別のドキュメント内にある場合に、モルフィアがオブジェクトを 'ing しないようにする簡単な方法はありますか?