У меня есть структура базы данных, которая похожа на описанную ниже.Hibernate создает дубликаты записей в базе данных
«Вселенная» может содержать любое количество «предметов». «Человек» может иметь «ящик», который относится к одному или нескольким «предметам» в «Вселенной»
Все объекты, элементы, личность, ящик - все таблицы базы данных. Коробка подобна таблице соединения для Person и Items.
Примечание: Я использую javax Persistence API и зимуют
Теперь элемент может быть создан во Вселенной и спасти. Человек может иметь объект в поле для этого элемента и сохранять информацию для Лица. Это прекрасно работает.
Но мое приложение желает создать Предмет во Вселенной, но не сохраняет его немедленно. Теперь я имею в виду попытку связать этот элемент с Лицом. У меня есть полный метод сохранения, который пытается сохранить все содержимое транзакции. Вызывая этот метод, я получаю две записи в таблице Items для одного и того же элемента, один из которых передается Лицом, а другой - Вселенной.
Есть ли способ, чтобы Вселенная сохранила Предмет и заставила Лица ссылаться на этот элемент с помощью аннотаций спящего режима и 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;
}
}
В таблице Box (джойн стол):
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;
...
}
В таблице Вселенная имеет один ко многим набор элементов.
отправьте свой код –
, вы знаете, мы программисты, поэтому показ вашего кода должен;) – Bozho
Вы, по-видимому, смешиваете аннотации hibernate и jpa. Это не может/не должно работать. –