gpt4 book ai didi

java - 具有 hibernate 和 oracle : seems to be dropping back to slow mode silently 的批量插入模式

转载 作者:行者123 更新时间:2023-12-04 06:49:39 25 4
gpt4 key购买 nike

根据我在这里读到的内容,我正在尝试将与 Hibernate 一起使用的批量插入到 Oracle 中:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html ,但是根据我的基准测试,它似乎并没有比以前快。

任何人都可以提出一种方法来证明hibernate是否使用批处理模式?我听说它可能会默默地进入正常模式有很多原因(例如关联和生成的 id),那么有什么方法可以找出它为什么非批处理的原因吗?

我的 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”类没有关联,唯一有趣的字段是 id:
@Entity
@Table(name="log_entries")
public class LogEntry {
@Id @GeneratedValue
public Long id;
..other fields - strings and ints...

但是,由于它是 oracle,我相信 @GeneratedValue 将使用 sequence generator .而且我相信只有“身份”生成器才会停止批量插入。

因此,如果有人能解释为什么它没有以批处理模式运行,或者我如何确定它是否处于批处理模式,或者找出为什么 hibernate 默默地回到慢速模式,我会不胜感激。

谢谢

最佳答案

(...) but with my benchmarking it doesn't seem any faster than before.



在什么之前?你在测量什么?你改变了什么?我们应该怎么猜?

Can anyone suggest a way to prove whether hibernate is using batch mode or not?



在 Debug模式下激活日志记录, o.h.j.BatchingBatcher类 - 这是 Batcher 的实现实际使用批处理的接口(interface) - 记录如下条目:
log.debug( "Executing batch size: " + batchSize );

您或许应该考虑使用 StatelessSession反而。

关于java - 具有 hibernate 和 oracle : seems to be dropping back to slow mode silently 的批量插入模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3305762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com