Hibernate Многие ко многим ссылки на существующие записи - PullRequest
0 голосов
/ 31 мая 2011

У меня есть отношения Многие ко многим между двумя сущностями: Item и ItemCategory

В классе Item

@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE})
@JoinTable(
        name="LINK_ITEM_CATEGORY",
        joinColumns={@JoinColumn(name="ITEM_ID")},
        inverseJoinColumns={@JoinColumn(name="CATEGORY_ID")}
        )
private Set<ItemCategory> associatedCategories = new HashSet<ItemCategory>();   

В классе ItemCategory

@Column(name="NAME")
private String name;

@ManyToMany(mappedBy="associatedCategories")
private Collection<Item> comprisesExpenditure = new ArrayList<Item>();

Всякий раз, когда я пытаюсь сохранить Предмет, категории, добавленные в Набор associatedCategories, сохраняются, даже если в базе данных существует категория с таким же name. Есть ли способ для hibernate для поиска категорий на основе name и создания ссылки с существующей вместо создания новой категории и связывания элемента с новой.

Ответы [ 2 ]

2 голосов
/ 31 мая 2011

Чтобы это работало правильно, вы должны правильно реализовать методы hashCode и equals. Без этого HashSet может вести себя непредсказуемо.

1 голос
/ 31 мая 2011

Нет.Поскольку имя не является идентификатором категории, у вас может быть несколько категорий с тем же именем.Вы можете добавить уникальное ограничение, но Hibernate не может волшебным образом знать, что категория ne, которую вы добавляете в набор, на самом деле должна быть существующей категорией с тем же именем.

При создании категорий и добавлении их в набор следует искать категорию с тем же именем и, если она существует, поместить эту существующую категорию в набор вместо новой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...