2017-07-18 133 views
1

我有以下域模型。 NB杰克逊@JsonView的注释字段:只比较具体注释的属性与JaVers?

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)注释的字段的发票和InvoiceLine实体,即,我不会继续,并且我不检索invoice.invoiceLine [i] .good实体。我的问题是 - 我可以修剪JaVers diff过程吗,我可以让JaVers只比较对象图的子集 - 那个注释过的子集,例如:与@JsonView(JSONInvoiceView.JSONInvoiceWithLinesView.class)

我的问题提到对实体领域的杰克逊@JsonView注解,但我想 - 如果JaVers支持观察性质的这样的过滤,那么这种过滤可以通过任何一组注释做approproate的领域/性质在 - 无论是杰克逊或自定义创建。

我听说过@DiffIgnore JaVers斜杠,我正在寻找这种机制的推广和精简。

我的场景是 - 我检索子图,我发送ir到Angular fronent,然后从Angular获得更新子图,我想将它合并回到我的后端。

回答

1

没有这样的提示,你不能通过指定一个特定的注释来过滤要比较的属性。

您只需要使用JaVers的注释: @DiffIgnore,@ShallowReference@IgnoreDeclaredProperties。 您也可以在课堂/界面层面上全局使用它们。

看到https://javers.org/documentation/domain-configuration/#ignoring-things

+0

你实际上并不想要的一切记录的大多数时候,但只有基本属性(肯定我们的情况下)。确保开发人员记得每次添加特定属性/获取者时,都会自动重新启动计算机以安装更新。不是最好的。 – Stef