Hibernate сеанс отслеживания объектов - PullRequest
1 голос
/ 08 января 2010

Я решил свою проблему, но я просто хочу лучше понять, как все работает.

Я перебираю коллекцию, создаю / инициализирую новый Продукт, добавляю категорию в его коллекцию (отображается 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 перестать отслеживать этот объект, чтобы я мог просто загрузить его, не беспокоясь об этих проблемах?

1 Ответ

1 голос
/ 09 января 2010

скважина Dao.GetById (b.categoryId); должен всегда возвращать эти объекты категории с переданным идентификатором, как можно получить разные объекты категории? если у вас есть два экземпляра сеанса, то не должно быть проблем, если вы не обновляете одну и ту же строку параллельно из обоих сеансов, что может привести к устаревшей проблеме объекта.

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