好吧,我有一张名为'Orcamento'的桌子,里面有很多'ItemOrcamento'。我还有一个叫做'Consulta'的桌子,它也有很多'ItemOrcamento'。
表'Consulta'可以有很多'ItemOrcamento',一个'ItemOrcamento'可以在很多'Consulta'中。
在理解了场景之后,我将解释我的问题:在JPA中,我做了以下关系:
@ManyToMany(fetch = javax.persistence.FetchType.LAZY)
@JoinTable(name = "item_consulta", joinColumns = { @JoinColumn(name = "id_consulta") }, inverseJoinColumns = { @JoinColumn(name = "id_item_orcamento") })
private Set<ItemOrcamento> itens;
当我使用大量“ItemOrcamento”创建一个新的“Consulta”时,行通常会插入表“item_consulta”中。想象一下这样的事情:
consulta.addItem(item1);
consulta.addItem(item2);
但是现在我想将item1替换为item3,所以我这样做:
consulta.addItem(item3);
consulta.addItem(item2);
在我看来,Hibernate(JPA)必须删除孤儿“item1”并添加“item3”,但它只是添加“item3”而“item1”继续在数据库中。
我该如何解决?
编辑1
我的关系是UNI-DIRECTIONAL,在“ItemOrcamento”中我不想要Set,因为我不需要,所以在ItemOrcamento中我没有任何@ManyToMany anotation引用joinTable“item_consulta”