У меня есть структура базы данных, похожая на описанную ниже.
«Вселенная» может содержать любое количество «Предметов». «Человек» может иметь «Коробку», которая относится к одному или нескольким «Предметам» во «Вселенной»
Юниверс, Предметы, Персона, Ящик - все таблицы базы данных. Коробка похожа на таблицу соединений для Персона и Предметы.
Примечание. Я использую API сохраняемости javax и спящий режим
Теперь предмет можно создать во Вселенной и сохранить. Человек может иметь сущность в Ящике для этого Предмета и сохранять информацию для Человека. Это отлично работает.
Но мое приложение хочет создать Предмет во Вселенной, но не сохраняет его немедленно. Теперь я имею в виду попытку связать этот предмет с человеком. У меня есть полный метод сохранения, который пытается сохранить все содержимое транзакции. Вызывая этот метод, я получаю две записи в таблице Предметов для одного и того же Предмета, один из которых передается Лицом, а другой - Вселенной.
Есть ли способ заставить Вселенную сохранить Предмет и заставить Человека ссылаться на него, используя аннотации в спящем режиме и JPA.
Любые идеи приветствуются.
Я плохо умею редактировать код. Пожалуйста, потерпите меня.
Класс 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
)
Класс предметов:
@Entity
@Table(name = "Items")
@Inheritance(strategy = InheritanceType.JOINED)
public class Items
{
/**
* Database identifier.
*/
private Integer myDbId;
...
}
В таблице Вселенной есть множество предметов.