仅将特别注释的属性与 JaVers 进行比较?

Compare only specifically annotated properties with JaVers?

我有以下域模型。 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;

//...
}

所以 - 我的问题是我只检索整个对象图的子图,例如只有带有 @JsonView(JSONInvoiceView.JSONInvoiceWithLinesView.class) 注释字段的 Invoice 和 InvoiceLine 实体,即我不会进一步,我不会检索 invoice.invoiceLine[i].good 实体。我的问题是 - 我可以修剪 JaVers diff 过程吗,我可以要求 JaVers 只比较对象图的子集 - 那个被注释的子集,例如@JsonView(JSONInvoiceView.JSONInvoiceWithLinesView.class)?

我的问题提到了实体字段上的 Jackson @JsonView 注释,但我想 - 如果 JaVers 支持对观察到的属性进行这种过滤,那么这种过滤可以通过适合 fields/properites 的任何一组注释来完成 - 是他们杰克逊或自定义创建。

我听说过@DiffIgnore JaVers 注释,我正在寻找这种机制的通用化和简化。

我的情况是 - 我正在检索子图,我正在将 ir 发送到 Angular 前端,然后我从 Angular 获取更新的子图,我想将它合并回我的后端。

有一个新注释 - @DiffInclude。它作为 class' 属性的正过滤器。

@DiffInclude — 将 属性 声明为 JaVers 可见。给定 class 中的其他属性将被忽略(除非明确包含)。包括是与忽略相反的方法,例如黑名单与白名单。您只能对给定的 class.

使用一种方法

https://javers.org/documentation/domain-configuration/#property-level-annotations