Я использую Java / Hibernate / MySQL. Я создаю список объектов, которые я хочу сохранить в базе данных. Некоторые из предметов являются новыми, а некоторые уже находятся в базе данных (я не знаю, какие именно). По этой причине я использую метод session.SaveOrUpdate, и он отлично работает, вставляя при необходимости и обновляя при необходимости.
Проблема в том, что каждый раз, когда я вызываю saveOrUpdate (myObject), я вижу, что есть вызов select, чтобы проверить, существует ли эта запись, поэтому, если я перебираю N объектов, у меня N запросов select. Можно ли как-нибудь объединить эти выборки вместе?
Влияет ли это поведение на производительность?
Спасибо
журнал, который я получаю:
Hibernate: select price0_.product_id as product1_3_0_, price0_.store_id as
store2_3_0_, price0_.date_updated as date3_3_0_, price0_.price as price3_0_,
price0_.quality as quality3_0_, price0_.update_source as update6_3_0_
from realworld.price price0_ where price0_.product_id=? and price0_.store_id=?
Hibernate: select price0_.product_id as product1_3_0_, price0_.store_id as
store2_3_0_, price0_.date_updated as date3_3_0_, price0_.price as price3_0_,
price0_.quality as quality3_0_, price0_.update_source as update6_3_0_
from realworld.price price0_ where price0_.product_id=? and price0_.store_id=?
Hibernate: insert into realworld.price
(date_updated, price, quality, update_source, product_id, store_id)
values (?, ?, ?, ?, ?, ?)
Hibernate: insert into realworld.price
(date_updated, price, quality, update_source, product_id, store_id)
values (?, ?, ?, ?, ?, ?)
Код, генерирующий это:
for (Price price : prices){
HibernateCurrentSession.currentSession().merge(price);
i++;
if ( i % batchsize == 0 ) {
//flush a batch of inserts and release memory:
HibernateCurrentSession.currentSession().flush();
HibernateCurrentSession.currentSession().clear();
}
}