Hibernate插入重复项 - 很难发现

时间:2017-02-24 09:18:19

标签: hibernate insert duplicates

几个小时之后,我终于决定发布我的问题了,看看之前是否有人遇到过这个问题。这很奇怪,我无法发现问题。我有一个客户管理系统,包含以下实体:

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通过注释完成,如下所示:

BusinessUnit

@OneToMany(mappedBy =" businessUnit",cascade = CascadeType.ALL,orphanRemoval = true)List events = new ArrayList();

发票

@OneToMany(mappedBy =" invoice",cascade = CascadeType.ALL,orphanRemoval = true)List items = new ArrayList();

InvoiceItem

@ManyToOne(cascade = CascadeType.PERSIST)@JoinColumn(name =" event_id")事件事件;

事件

@ManyToOne @JoinColumn(name =" businessUnit_id")BusinessUnit businessUnit;

实际上,BusinessUnit和Event之间的关系似乎是多余的,然后可以通过invoiceItem实例间接获得关系。这可能可以解决问题,因为显然导致重复条目的是businessunit持有的实例。

这可以是一个解决方案。但我对任何其他解决方案持开放态度。

这一切对我来说都很难详细解释。希望问题很清楚。

感谢您的时间和最好的问候,

卡洛斯。

0 个答案:

没有答案