Я решил свою проблему, но я просто хочу лучше понять, как все работает.
Я перебираю коллекцию, создаю / инициализирую новый Продукт, добавляю категорию в его коллекцию (отображается m: m), а затем сохраняю и фиксирую транзакцию.
for(Blah b : blahs)
{
session = getcurrensession();
Product p = new Product(1,2,3,4,5);
Category c = Dao.GetById(b.categoryId);
session.beginTransaction();
p.getCategories().add(c);
session.save(p);
session.gettransaction.commit();
}
Теперь я получил сообщение о том, что другой объект с таким же идентификатором уже отслеживается, поэтому произошла ошибка дублирования.
Я подумал, что это был объект категории, и это действительно было проблемой, поэтому я сделал это:
Category c = null;
forloop
{
..
if(c == null || c.getId() != b.categoryId)
c = Dao.GetById(b.categoryId);
...
}
Так что теперь категория не загружается, если у нее нет другого идентификатора, и теперь моя программа работала нормально.
Эта проблема, есть ли другой способ сделать это?
Могу ли я заставить Hibernate перестать отслеживать этот объект, чтобы я мог просто загрузить его, не беспокоясь об этих проблемах?