ORM katmam için Hazırda Beklet özelliğini kullanıyorum. Bir işlemde HQL toplu iş kümesini çalıştırmayı deniyorum (session.update kullanamıyorum). Sorun, transaction.commit() öğesinin bile döngünün sonunda olması, güncelleme sorgularının tek tek gerçekleştirilmesidir. Bir işlemde birden çok HQL sorgusu çalıştırmanın bir yolu var mı?HQL Query kullanılarak hazırda bekleyen toplu güncelleştirme
public void updateItems() {
t = session.beginTransaction();
for (int i = 0; i < itemList.size(); i++) {
Query q = createUpdateQuery(session, itemList.get(i));
q.executeUpdate(); //updating one by one, and not waiting for transaction commit
}
t.commit();
}
Query createUpdateQuery(Session session, Item item) {
Query q = session.createQuery(
"Update Item i set i.notes=:notes, i.time=:time, i.counter=:counter, i.status=:status Where i.id=:id and i.time=:time");
q.setParameter("time", item.getTime());
q.setParameter("status", item.getStatus());
q.setParameter("notes", item.getNotes());
q.setParameter("id", item.getId());
return q;
}
Herhangi bir yardımı takdir edin.
Kodunuzda açıkça yanlış bir şey göremiyorum. Güncellemeler tek tek veritabanında gerçekleşecek, ancak taahhüt verene kadar işlenmeyecek. İşlemi çağırmadan önce herhangi bir zamanda işlemi geri alabilmeniz gerekir. Bu oldukça standart. Veritabanına gidiş dönüşlerden sadece endişeli misiniz? – markwatsonatx
Bir işlemin olması, büyük büyük toplu işlemde birden fazla güncelleştirme göndermesi anlamına gelmez. Ve yaklaşımınızda doğru bakmayan çok fazla şey var (keşke üretim kodunda yapacağınız şey buysa). –
Cevaplarınız için teşekkürler. Bu yaklaşıma session.update (item) den geçmem gerekiyor ve performansta bir düşüş var. – Lasti