使用什么 session.beginTranscation 或 session.getTranscation?

what to use session.beginTranscation or session.getTranscation?

我正在使用 Spring mvc 和 Hibernate。 我对 beginTranscation 和 getTranscation 感到困惑。 使用任何代码都可以,但我想知道哪种方法是正确的。

下面是我的Dao代码class

        Session session = sessionFactory.getCurrentSession();
        session.beginTransaction().begin();
        executeQuery = session.createQuery(sql);
        Employee emp = (Employee) executeQuery.uniqueResult();
        session.beginTransaction().commit();

谁能告诉我应该使用 beginTranscation 还是 getTrancation ?

session.getTransaction().begin() - 假设交易已经存在(您已经开始交易),并且它将使用它。

session.beginTransaction() - 将检查是否已经存在交易,如果存在则不会创建新交易,并将使用 运行 一个。如果还没有交易存在,它将创建一个新交易。

所以显然取决于您的需求。

此外,请注意,因为您正在调用 sessionBeginTransaction() 两次,所以请将您的代码更改为

Session session = sessionFactory.getCurrentSession();
Transaction tx = session.beginTransaction();
executeQuery = session.createQuery(sql);
Employee emp = (Employee) executeQuery.uniqueResult();
tx.commit();

而这个 session.beginTransaction().begin() 调用等于 session.beginTransaction()

一般来说,由于您已经配置了Spring环境,Spring具有强大的transaction management , so instead of handling transactions by yourself, stick to what offers a framework you are using. At least you can try to use programmatic way of managing transactions (e.g. TransactionTemplate)