Hibernate在数据库中创建重复的条目

时间:2010-09-23 05:03:38

标签: java hibernate orm jpa

我有一个类似下面描述的数据库结构。

“Universe”可以包含任意数量的“Items”。 “人”可能有一个“盒子”,指的是“宇宙”中的一个或多个“物品”

Universe,Items,Person,Box都是数据库表。 Box就像Person和Items的连接表。

注意:我使用的是javax持久性API和hibernate

现在可以在Universe中创建一个项目并保存。一个人可以在此项目的框中有一个实体,并保存人员的信息。这很好。

但我的应用程序希望在Universe中创建一个Item但不立即保存它。现在我指的是尝试将此项与Person关联。我有一个完整的保存方法,它尝试保存事务中的所有内容。调用此方法我在Items表中为同一个Item获取了两个条目,一个由Person引用,另一个由Universe引用。

有没有办法让Universe保存Item并让Person通过使用hibernate注释和JPA来引用这个Item。

欢迎任何想法。

不擅长编辑代码。请耐心等待。

Person类:

@Entity
@Table(name = "Person")
@Inheritance(strategy = InheritanceType.JOINED)
public class Person
{

    private Integer myId;
    private String myName;
    private String Occupation;

    /**
     * Set of Items.
     */
    private Set<Items> myItems = new HashSet<Items>();

    @OneToMany
    @JoinTable(name="Box",
        joinColumns = @JoinColumn(name="person_id"),
        inverseJoinColumns = @JoinColumn(name="item_id"))
    @Cascade(value = {org.hibernate.annotations.CascadeType.DELETE_ORPHAN,
                     org.hibernate.annotations.CascadeType.ALL})

    private Set<Items> getItems()
    {
        return myItems;
    }
}

表格框(联接表):

create table Box(
    person_id int references Person(id) not null,
    item_id int references Item(id) not null
)

Items类:

@Entity
@Table(name = "Items")
@Inheritance(strategy = InheritanceType.JOINED)

public class Items 
{ 
    /**
     * Database identifier.
     */
    private Integer myDbId;

    ...

}

Universe表有一对多的项目。

1 个答案:

答案 0 :(得分:1)

这是黑暗中的一个重要事件:使用EntityManager#merge。如果您想要更精确的答案,请在问题中添加更多详细信息。

相关问题