Lentidão ao salvar

Bom dia!
Estou com um problema ao salvar dados no banco.
Tenho um serviço e ao salvar demora demais se existirem muitos registros para serem salvos…
Tenho um for que percorre todos os registros de uma grid, e nesse caso existem 1000 (mil) itens e cada um deles
possui 6 atributos em media… ou seja seriam 6 mil registros ao salvar.
Se a grid possui até 100 registro o “save” é até aceitável, porem quando aumenta fica lento demais…
Vou colocar um trecho do código onde é feito o save…
Se alguem tiver alguma dica de como melhorar fico agradecido.

[code] for (Object obj : array) {
JSONObject o = (JSONObject) obj;
System.out.println("idInvRepSeq: " + o.get(“idInvRepSeq”));
System.out.println("seqNumber: " + o.get(“seqNumber”));
System.out.println("seqStatus: " + o.get(“seqStatus”));
System.out.println("serial: " + o.get(“serial”));
System.out.println("causeId: " + o.get(“causeId”));
System.out.println("troubleTypeId: " + o.get(“troubleTypeId”));

			session.beginTransaction();

			update = session.update(tbSequencerQualityReport);
			invRepSeq = o.get("idInvRepSeq") != null ? o.get("idInvRepSeq").toString() : null;
			seqStatus = o.get("seqStatus") != null ? convert(o.get("seqStatus").toString()) : null;
			seqNumber = o.get("seqNumber") != null ? o.get("seqNumber").toString() : null;
			serial = (o.get("serial") != null && !StringUtils.isEmpty(o.get("serial").toString().trim()) )? o.get("serial").toString() : null;
			troubleType = o.get("troubleTypeId") != null ? convert(o.get("troubleTypeId").toString()) : null;
			troubleCause = o.get("causeId") != null ? convert(o.get("causeId").toString()) : null;

			update.addSet(tbSequencerQualityReport.invRepSeq, invRepSeq);
			update.addSet(tbSequencerQualityReport.seqStatus, seqStatus);
			update.addSet(tbSequencerQualityReport.seqNumber, seqNumber);
			update.addSet(tbSequencerQualityReport.serial, serial);
			update.addSet(tbSequencerQualityReport.troubleTypeId, troubleType);
			update.addSet(tbSequencerQualityReport.causeId, troubleCause);
			update.where(WhereConditions.and(WhereConditions.equal(tbSequencerQualityReport.seqNumber, seqNumber), WhereConditions.equal(
					tbSequencerQualityReport.qltRecRepId, beanRecQualityReport.getIdRecQltReport())));
			update.execute();
			session.commit();

		}[/code]

Só pra lembrar, se o save tiver mil linhas de registro, ele percorre este for mil vezes…

Obrigado…

A única forma que vejo em otimizar isso é criar uma Stored Procedure no banco;

Outra coisa que gostaria de comentar, verifique realmente a necessidade de realizar um update nos objetos pois fazer um insert é bem mais rápido do que um update.

Obrigado pela resposta…
Vou pesquisar sobre o tópico que você citou…

Obrigado

Só pra esclarecer a solução encontrada foi criar um Index
no ponto onde estava sendo feito o where do update…
Pois ele nao estava sendo feito por pk e isso fazia com que o banco percorresse muitos
registros para salvar…

Enfim é isso!

Obrigado!