У меня возникла проблема при добавлении новой записи в отношении многие ко многим, потому что список огромен.Пример:
Item item = new Item(1);
Category cat = dao.find(1, Category.class);
List<Category> list = new ArrayList<>();
list.add(cat);
item.setCategoryList(list);
cat.getItemList().add(item);
Проблема в том, что список категорий Itens огромен, с большим количеством itens, поэтому выполнение cat.getItemList () занимает очень много времени.Везде, где я ищу правильный способ добавления записи «многие ко многим», говорится, что это необходимо сделать.Может кто-нибудь помочь?
Редактировать: Небольшой контекст: я организовываю свои itens с тегами, так что 1 элемент может иметь несколько тегов, и 1 тег может иметь несколько itens, время прошло, и теперь у меня есть теги с большим количеством itens (>5.000), и теперь, когда я сохраняю новый элемент с одним из этих тегов, это занимает много времени, я отлаживал свой код и обнаружил, что большая часть задержки находится в строке cat.getItensList (), что имеет смысл, так как имеетобширный список итальянцев.Я много искал, как это сделать, и все говорят, что правильный способ сохранить запись в случае «многие ко многим» - это добавить в список по обе стороны отношения, но если одна сторона огромна,это займет много времени, так как вызов getItensList () загружает их в контексте.Я ищу способ сохранить свой предмет, ссылаясь на тег без загрузки всех итэнов этого тега.
Редактировать 2: Мои классы: Предмет:
@Entity
@Table(name = "transacao")
@XmlRootElement
public class Transacao implements Serializable {
@ManyToMany(mappedBy = "transacaoList")
private List<Tagtransacao> tagtransacaoList;
...(other stuff)
}
Тег:
@Entity
@Table(name = "tagtransacao")
@XmlRootElement
public class Tagtransacao implements Serializable {
@JoinTable(name = "transacao_has_tagtransacao", joinColumns = {
@JoinColumn(name = "tagtransacao_idTagTransacao", referencedColumnName = "idTagTransacao")}, inverseJoinColumns = {
@JoinColumn(name = "transacao_idTransacao", referencedColumnName = "idTransacao")})
@ManyToMany
private List<Transacao> transacaoList;
...(other stuff)
}
Редактировать 3: Что я решил решить: В ответ на вопрос Ариэля Кохана я попытался сделать NativeQuery для вставки отношения:
Query query = queryDAO.criarNativeQuery("INSERT INTO " + config.getNomeBanco() + ".`transacao_has_tagtransacao` "
+ "(`transacao_idTransacao`, `tagtransacao_idTagTransacao`) VALUES (:idTransacao, :idTag);");
query.setParameter("idTransacao", transacao.getIdTransacao());
query.setParameter("idTag", tag.getIdTagTransacao());
Я смогсократить время ожидания очереди с 10 секунд до 300 миллионов, что впечатляет.В конце концов, для моего проекта лучше, если он уже готов сделать это, вместо того, чтобы создавать новый класс, который представляет выпуск «многие ко многим».Спасибо всем, кто пытался помочь \ o /