仅将特别注释的属性与 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
我有以下域模型。 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