내가 최대 절전 모드 의심이 일괄 처리 최대 절전 모드로, 나는 그들이나는 새로운 오전
말했다 최대 절전 모드 일괄 처리에 대한 몇 가지 튜토리얼을 읽어Session session = SessionFactory.openSession();
Transaction tx = session.beginTransaction();
for (int i=0; i<100000; i++)
{
Employee employee = new Employee(.....);
session.save(employee);
}
tx.commit();
session.close();
이
Hibernate가 모든 지속 된 개체를 캐시합니다 세션 레벨 캐시를 사용하면 궁극적으로 애플리케이션이 50,000 번째 행의 OutOfMemoryException으로 넘어지게됩니다. 이 같은 최대 절전 모드로 일괄 처리를 사용하는 경우에는
Session session = SessionFactory.openSession();
Transaction tx = session.beginTransaction();
for (int i=0; i<100000; i++)
{
Employee employee = new Employee(.....);
session.save(employee);
if(i % 50 == 0)
{ // Same as the JDBC batch size
//flush a batch of inserts and release memory:
session.flush();
session.clear();
}
}
tx.commit();
session.close();
내 의심의 여지가 대신 외부 세션을 초기화이며,이 문제를 해결할 수 있습니다, 우리는 왜 같은 for 루프에 그것을 초기화 할 수 없습니다
Session session = null;
Transaction tx = session.beginTransaction();
for (int i=0; i<100000; i++)
{
session =SessionFactory.openSession()
Employee employee = new Employee(.....);
session.save(employee);
}
tx.commit();
session.close();
올바른 방법입니까, 아니면 올바른 방법이 아니라고 제안하나요?
크기 (50)의 배치를 위해 이러한 개체에 의해 점유 된 메모리를 취소 할 단지에 대한 기사를 발견 [최대 절전 모드에서 일괄 처리] (http://onetouchcode.com/2016/08/21/batch-processing-example-in-hibernate/) – Shailendra