BusinessUnit,Invoice,InvoiceItem,PictureFolder和Event
它们之间的关系如下:
BusinessUnit - OTM - > InvoiceItem
BusinessUnit - OTM - > PictureFolder
BusinessUnit - OTM - >事件
发票 - OTM - > InvoiceItem
InvoiceItem - MTO - >事件
PictureFolder - MTO - >事件
事件 - MTO - > BusinessUnit
BusinessUnit是指给定商家单位的一张或多张发票的所有发票项目。 Invoice,InvoiceItem和PictureFolder有望成为selfexplanatory。事件将我们作为特定事件的InvoiceItem持有者(理解事件是业务单元发生的任何事件,例如任何给定的修复)。因此,事件可能涉及与多个BusinessUnit和发票对应的多个发票项目。
希望这个模型解释清楚。
我的问题是,当我持有Invoice时,我创建了一个事件(在同一个用户案例中,通过对Invoice对象的单个persist()调用并依赖于级联功能)将事件实例复制。其余部分正确写入数据库(顺便提一下MySQL)。
以下是我发现的最奇怪的结果:
在调用persist方法时:persist(invoice)我在传递给方法的对象和调用的结果对象(比如inv1和inv2)之间进行比较,将inv2作为生成的实例。
在inv1中检查BusinessUnit和BillableItem实例的事件实例时,引用指向同一个对象。
但是当在生成的实例inv2中检查相同的实例路径时,会返回两个不同的实例,这两个实例又对应于插入MySQL事件中的ducplicate条目'表
ORM Mapping通过注释完成,如下所示:
@OneToMany(mappedBy =" businessUnit",cascade = CascadeType.ALL,orphanRemoval = true)List events = new ArrayList();
@OneToMany(mappedBy =" invoice",cascade = CascadeType.ALL,orphanRemoval = true)List items = new ArrayList();
@ManyToOne(cascade = CascadeType.PERSIST)@JoinColumn(name =" event_id")事件事件;
@ManyToOne @JoinColumn(name =" businessUnit_id")BusinessUnit businessUnit;
实际上,BusinessUnit和Event之间的关系似乎是多余的,然后可以通过invoiceItem实例间接获得关系。这可能可以解决问题,因为显然导致重复条目的是businessunit持有的实例。
这可以是一个解决方案。但我对任何其他解决方案持开放态度。
这一切对我来说都很难详细解释。希望问题很清楚。
感谢您的时间和最好的问候,
卡洛斯。