gpt4 book ai didi

java - Hibernate 模板关闭事务

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

我运行以下工作代码:

    Session session = null;

try {

SessionFactory sessionFactory = new Configuration().configure()
.buildSessionFactory();
session = sessionFactory.openSession();

String id = (String) FacesContext.getCurrentInstance()
.getExternalContext().getRequestParameterMap().get(
"storeId");

Transaction t = session.beginTransaction();

stores = getStores();

for (Store store : stores) {
if (store.getId() == Integer.parseInt(id)) {
session.delete(store);
}
}
t.commit();
} catch (Exception e) {
} finally {
session.close();
}
}

当我尝试重做此代码以使用 Hibernate 模板时,我会无休止地向 DB 请求:

    HibernateTemplate template = new HibernateTemplate();
template .setSessionFactory(sessionFactory);

stores = template.find("from Stores");

for (Store store : stores) {
if (store.getId() == Integer.parseInt(id)) {
template.delete(store);
}}

看起来交易还没有结束。

在这种情况下我该如何结束交易?使用 Hibernate 模板方法而不是第一个代码中显示的 session 方法会更好吗?

最佳答案

你没有说,但我假设你指的是 Spring Framework 中的 HibernateTemplate 类。 HibernateTemplate 参与 Spring 事务,但它自己并不管理它们。 Spring 提供了一个 lot of ways以编程方式和声明方式管理事务。如果您只是进行试验,可以使用 TransactionTemplate类以快速测试它。对于较大的项目,您应该考虑使用声明式事务管理,因为它可以简化您的代码,尽管最初设置起来有点棘手。

至于HibernateTemplate 方法是否比手动管理 session 更好,我想说任何减少样板代码的方法都是好事,是的。这对于大型项目尤其重要。但是,根据您的项目,HibernateTemplate 甚至可能不是必需的。它最初是为了解决 Hibernate 2.x 中的一些缺陷而创建的,但是在 Hibernate 3 中消除了其中的许多缺陷。因此在采用它之前,请阅读 HibernateTemplate用于讨论优点的 JavaDoc。

关于java - Hibernate 模板关闭事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1443590/

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