У меня есть следующая модель домена. Аннотации NB Jackson @JsonView для полей:
public interface JSONInvoiceBasicView {
}
public interface JSONInvoiceWithLinesView extends JSONInvoiceBasicView {
}
public interface JSONInvoiceWithLinesViewExt extends JSONInvoiceWithLinesView {
}
}
@PersistenceUnit(unitName="ERP_PU")
@Entity
@Table(name="INVOICE")
public class Invoice extends FrameworkEntity {
@Id
@SequenceGenerator(name = "PK_INVOICE_GEN", sequenceName = "PK_INVOICE_GEN", allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PK_INVOICE_GEN")
@Column(name = "ID")
@JsonView(JSONInvoiceView.JSONInvoiceBasicView.class)
private Long id;
@OneToMany(mappedBy="invoiceLine", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JsonView(JSONInvoiceView.JSONInvoiceWithLinesView.class)
@JsonManagedReference
private List<InvoiceLine> lines = new ArrayList<InvoiceLine>();
@Temporal(TemporalType.DATE)
@Column(name = "DATE")
@JsonView(JSONInvoiceView.JSONInvoiceBasicView.class)
private Date startDate;
//...
}
@PersistenceUnit(unitName="ERP_PU")
@Entity
@Table(name="INVOICE_LINE")
public class InvoiceLine extends FrameworkEntity {
@Id
@Column(name = "ID")
@JsonView(JSONInvoiceView.JSONInvoiceWithLinesView.class)
private Long id;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
@JoinColumn(name="FK_INVOICE")
@JsonBackReference
private Invoice invoice;
@Column(name = "AMOUNT")
@JsonView(JSONInvoiceView.JSONInvoiceWithLinesView.class)
private BigDecimal amount;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
@JoinColumn(name="FK_GOOD")
@JsonView(JSONInvoiceView.JSONInvoiceWithLinesExtView.class)
private Good good;
//...
}
@PersistenceUnit(unitName="ERP_PU")
@Entity
@Table(name="GOOD")
public class Good extends FrameworkEntity {
@Id
@Column(name = "ID")
private Long id;
@Column(name = "DESCRIPTION", length=200)
private String description;
//...
}
Итак, моя проблема в том, что я получаю только подграф всего графа объектов, например. только сущности Invoice и InvoiceLine с полями, аннотированными @JsonView(JSONInvoiceView.JSONInvoiceWithLinesView.class)
, т.е. я не иду дальше и не получаю сущность invoice.invoiceLine[i].good. Мой вопрос: могу ли я сократить процесс сравнения JaVers, могу ли я попросить JaVers сравнить только подмножество графа объектов - то подмножество, которое аннотировано, например. с @JsonView(JSONInvoiceView.JSONInvoiceWithLinesView.class)
?
В моем вопросе упоминаются аннотации Jackson @JsonView для полей сущностей, но я предполагаю, что если JaVers поддерживает такую фильтрацию наблюдаемых свойств, то эту фильтрацию можно выполнить с помощью любого набора аннотаций, подходящих для полей/свойств, будь то Джексон или созданный пользователем.
Я слышал об аннотации @DiffIgnore JaVers, я ищу обобщение и оптимизацию этого механизма.
Мой сценарий таков: я получаю подграф, я отправляю его в Angular, а затем я получаю обновленный подграф от Angular, и я хочу объединить его обратно в свой бэкэнд.