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

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

Universe,Items,Person,Box都是数据库表。 Box就像个人和项目的联接表。

注意:我正在使用javax持久性API和休眠模式

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

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

有没有一种方法可以使Universe保存该项目并使Person通过使用休眠注释和JPA引用此项目。

任何想法都欢迎。

不擅长编辑代码。请多多包涵。

人员类:

@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;
    }
}


表Box(联接表):

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具有一对多的项目集。

最佳答案

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

10-08 02:36