У меня есть база данных, включающая такие объекты, как Tag и Item.Один элемент может иметь много тегов, и один тег может быть назначен многим элементам, поэтому отношение @ManyToMany:
@Entity
@Table(name="items")
public class Item {
...other fields...
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "items_tags", joinColumns = @JoinColumn(name = "item", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "tag", referencedColumnName = "id"))
private List<Tag> tags = new ArrayList<>();
}
, и я пытаюсь удалить теги из базы данных, установив соответствующий флажок.HTML-страница.Первый метод, который я попробовал, был:
public void deleteTags(List<Tag> selectedTags) {
for (Tag tag : selectedTags) {
em.remove(em.merge(tag));
}
}
, который работает, только если все выбранные теги не были назначены ни одному элементу.В другом случае происходит сбой метода и ничего не удаляется, поэтому я попытался обойти это:
@EJB
private ItemsServices is;
@PersistenceContext
private EntityManager em;
...stuff...
public void deleteTags(List<Tag> selectedTags) {
List<Item> items = is.getItems();
for (Tag tag : selectedTags) {
for (Item i : items) {
if(i.getTags().contains(tag)) {
// Do some popup
} else {
em.remove(em.merge(tag));
}
}
}
}
Но, ну, он тоже не работает.Есть идеи как это решить?