我有一个类似下面描述的数据库结构。
“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表有一对多的项目。
答案 0 :(得分:1)
这是黑暗中的一个重要事件:使用EntityManager#merge
。如果您想要更精确的答案,请在问题中添加更多详细信息。