gpt4 book ai didi

java - Hibernate 中的 session 管理(全局临时表)

转载 作者:行者123 更新时间:2023-11-29 08:46:10 27 4
gpt4 key购买 nike

我有 2 个表:SaveBatchLocalQueue。另外,我有一个过程 SaveLocalSaveLocal 将行从 SaveBatchLocal 中删除到 Queue。但我必须说,SaveBatchLocal 是全局临时表。

如果我将新行添加到 SaveBatchLocal,然后使用 Oracle SQL Developer 调用 Save,行会正确出现在 Queue 中,但我的不会 Spring 的应用程序。据我所知,临时数据在一个 session 上下文中是可见的。那么,我该如何修改我的代码呢? sessionFactory 是否每次都创建新 session ?

这是我的代码:

    public void add(LinkedList<SmsEntity> smsEntityList) {
try {
Session session = null;
session = this.sessionFactory.getCurrentSession();
Iterator<SmsEntity> iterator = smsEntityList.iterator();
while (iterator.hasNext()) {
session.save(iterator.next());
}
save(session);
} catch (Exception e) {
e.printStackTrace();
}

}

public void save(Session session) {
Query query = session.createSQLQuery("{CALL DBManager.SaveLocal}");
query.executeUpdate();

}

如果我将表更改为非临时表,效果很好。

最佳答案

下面的代码应该可以帮到你

public void add(LinkedList<SmsEntity> smsEntityList) {
try {
Session session = null;
Transaction tx=session.beginTransaction();
session = this.sessionFactory.getCurrentSession();
Iterator<SmsEntity> iterator = smsEntityList.iterator();
while (iterator.hasNext()) {
session.save(iterator.next());
tx.commit();
}
save(session);
} catch (Exception e) {
e.printStackTrace();
}

}

public void save(Session session) {
Query query = session.createSQLQuery("{CALL DBManager.SaveLocal}");
query.executeUpdate();

}

您所需要的只是将更改提交到数据库的事务。

希望对您有所帮助。

关于java - Hibernate 中的 session 管理(全局临时表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25243825/

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