1
문제를 해결했지만 어떻게 작동하는지 더 잘 이해하고 싶습니다.객체를 추적하는 최대 절전 세션
나는 새로운 제품을 생성/초기화하고 카테고리를 컬렉션 (매핑 된 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();
}
는 지금은 같은 ID를 가진 다른 개체가 이미 추적되고 않다는 오류가, 그래서 벌어지고 중복 오류가 발생했습니다.
나는 그것이 문제였습니다 참으로 분류 객체, 그리고 생각, 그래서 이런 짓을 :
Category c = null;
forloop
{
..
if(c == null || c.getId() != b.categoryId)
c = Dao.GetById(b.categoryId);
...
}
그래서 지금은 다른 ID를 가지고 있으며, 지금 내 프로그램이 작동하지 않는 범주가로드되지 않습니다 벌금.
이 문제는 다른 방법이 있습니까?
최대 절전 모드로 객체를 추적하는 것을 멈추게 할 수있어서 이러한 문제에 대해 걱정할 필요가 없다.
DAO가 위의 반복 코드와 동일한 세션을 사용하고 있습니까? ISession은 UOW - Unit Of Work이며, 당신은 2 단위의 작업을하고 있다는 느낌이 들었습니다. – David
글쎄, 내 DAO는 Session session = HibernateUtil.getSessionFactory()를 사용한다. getCurrentSession(); 그래서 나는 그것이 현재의 세션이라고 생각했지만 나는 그렇지 않다고 생각하니? – mrblah