我有一个数据库结构,类似于下面描述的结构。
“ 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
。如果您想要更精确的答案,请在问题中添加更多详细信息。