Я пытаюсь получить пакетную вставку, работающую с Hibernate, в Oracle, в соответствии с тем, что я прочитал здесь: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html, но с моим сравнительным тестом это выглядит не так быстро, как раньше.
Кто-нибудь может предложить способ доказать, использует ли Hibernate пакетный режим или нет?Я слышал, что существует множество причин, по которым он может незаметно перейти в обычный режим (например, ассоциации и сгенерированные идентификаторы), поэтому есть ли какой-нибудь способ выяснить, почему он стал не пакетным?
Мой hibernate.cfg.xmlсодержит эту строку, которая, как мне кажется, это все, что мне нужно, чтобы включить пакетный режим:
<property name="jdbc.batch_size">50</property>
Мой код вставки выглядит следующим образом:
List<LogEntry> entries = ..a list of 100 LogEntry data classes...
Session sess = sessionFactory.getCurrentSession();
for(LogEntry e : entries) {
sess.save(e);
}
sess.flush();
sess.clear();
Мой класс 'logentry' не имеет ассоциаций,единственное интересное поле - идентификатор:
@Entity
@Table(name="log_entries")
public class LogEntry {
@Id @GeneratedValue
public Long id;
..other fields - strings and ints...
Однако, поскольку это оракул, я считаю, что @GeneratedValue будет использовать генератор последовательности .И я верю, что только генератор «identity» остановит массовые вставки.
Так что если кто-нибудь может объяснить, почему он не работает в пакетном режиме, или как я могу точно узнать, если он работает или нет »Буду в пакетном режиме или выяснить, почему hibernate беззвучно возвращается в медленный режим, я был бы очень признателен.
Спасибо