【问题标题】:Disabling implicit transactions in Hibernate在 Hibernate 中禁用隐式事务
【发布时间】:2014-01-21 15:13:45
【问题描述】:

我是 hibernate 新手,我已经编写了以下代码,

package main;

import java.util.List;

import model.Message;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.stat.Statistics;

public class Main {

    public static void main(String[] args) throws Exception {
        Configuration configuration = new Configuration().configure();
        SessionFactory factory = configuration.buildSessionFactory();

        Session session = factory.openSession();



        //Transaction transaction = session.beginTransaction();
        List<Message> messages = session.createQuery("from Message").list();

        Message message = new Message();
        message.setMessage("Hello World");

        session.save(message);

        System.out.println(messages);



        System.out.println(session);
        session.close();
        factory.close();
        System.out.println("After the closure");


    }
}

这里我还没有开始交易,我已经关闭了会话。但是 Hibernate 并没有抱怨 Transactions。是否有隐式事务,如果有,我应该如何禁用它们。

【问题讨论】:

    标签: java hibernate transactions


    【解决方案1】:

    Hibernate 没有理由抱怨事务。 :)

    您在完成工作后关闭了会话。但是,您不应该为每个数据库编辑创建一个新的 sessionFactory:

    SessionFactory 是一个创建成本高的线程安全对象, 旨在由所有应用程序线程共享。它被创建一次, 通常在应用程序启动时,从配置实例。

    Session 是一个廉价的、非线程安全的对象,应该被使用 一次然后被丢弃:单个请求,对话或 单个工作单元。会话不会获得 JDBC 连接,或者 数据源,除非需要。它不会消耗任何资源 直到使用为止。

    阅读有关 Hibernate 事务管理的更多信息here

    【讨论】:

      猜你喜欢
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 2012-12-24
      • 2015-03-26
      相关资源
      最近更新 更多