当前位置:  开发笔记 > 编程语言 > 正文

JPA(Hibernate)如何在从数据库中获取Object时处理事务

如何解决《JPA(Hibernate)如何在从数据库中获取Object时处理事务》经验,为你挑选了1个好方法。

我目前正在用java开发一个应用程序,使用Hibernate作为持久性管理器,JPA作为持久性管理hibernate的抽象.

我想知道在事务中包装结果查询的影响.我知道实体经理必须保持开放,因为懒惰地获取了所有这些事务中的事务错误?

这是一个具有事务激活/停用功能的代码示例.

public List get(Integer max, EntityManager em, Boolean withTransaction) {
    EntityTransaction tx = null;
    try {
        if (withTransaction) {
            tx = em.getTransaction();
            tx.begin();
        }

        Query query = em.createQuery("from Exportdata");
        query.setMaxResults(10);
        List list = query.getResultList();

        if (withTransaction)
            tx.commit();

        return list;
    } catch (RuntimeException re) {
        if (withTransaction)
            if (tx != null && tx.isActive())
                tx.rollback();

        throw re;
    }
}

调用此函数时启用或禁用withTransaction有什么区别?

谢谢大家,弗雷德



1> johnstok..:

这里没有实际区别,因为您没有更改任何数据.您执行的查询将生成SQL选择.允许您将ACID属性应用于插入,更新等集合的事务.

但是,如果您开始操作从此方法返回的列表中的对象,调用setter等,那么这些更改将在特定的基础上通过事务传播回数据库.换句话说,您将在自动提交模式下有效地使用数据库.这不太可能是你想要的.

需要了解的重要一点是,持久化上下文和事务的持续时间可以单独管理.通常你会想要一起管理它们.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有