gpt4 book ai didi

java - 如何在 hibernate 中提交批量插入?

转载 作者:搜寻专家 更新时间:2023-11-01 00:51:31 26 4
gpt4 key购买 nike

我必须使用 hibernate 将大量对象保存到数据库中。我不想一次提交所有这些对象,而是希望在 session 中出现 n (BATCH_SIZE) 个对象后立即提交。

Session session = getSession();
session.setCacheMode(CacheMode.IGNORE);
for(int i=0;i<objects.length;i++){
session.save(objects[i]);
if( (i+1) % BATCH_SIZE == 0){
session.flush();
session.clear();
}
}

我会尝试类似上面的方法,但我读到 session.flush() 不会将更改提交到数据库。以下代码是执行此操作的正确方法吗?

Session session = getSession();
session.setFlushMode(FlushMode.COMMIT);
session.setCacheMode(CacheMode.IGNORE);
session.beginTransaction();
for(int i=0;i<objects.length;i++){
session.save(objects[i]);
if( (i+1) % BATCH_SIZE == 0){
session.getTransaction().commit();
session.clear();
//should I begin a new transaction for next batch of objects?
session.beginTransaction();
}
}
session.getTransaction().commit();

最佳答案

据我所知,您的解决方案是正确的。

可能只有一个问题:根据您从 SessionFactory 获取 session 的方式,提交也可能会关闭您的 session ,您将不得不打开一个新 session 。据我所知,如果您使用 getCurrentSession() 和 session 上下文“线程”,这种情况总会发生。如果您使用的是 openSession(),则 session 似乎不会通过提交自动关闭。

您可以在提交事务后使用 isOpen() 方法轻松检查这一点。如果 session 关闭,您必须在进一步调用 save() 之前打开一个新 session 。

关于java - 如何在 hibernate 中提交批量插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13642219/

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