休眠的工作。是否有必要每次都使用交易?如果我在搜索数据时不使用它会导致任何问题吗?

时间:2012-01-27 10:48:52

标签: java hibernate session

我编写了以下代码来从数据库中检索数据,我们是否需要开始交易?因为它运行没有任何问题。是否有必要每次都使用它?如果没有它,它会在未来引起任何问题吗?

public static Student getStudentById(long id) {
    Session session = null;
    Student student = null;
    //Transaction transaction=null;
    try {
        session = HibernateUtil.getSessionFactory().openSession();
        //transaction = session.getTransaction();
        //transaction.begin();
        /**
         * names in the query should match the related class name and variable names.
         */
        Query query = session.createQuery("from Student where studentId = :id");
        query.setLong("id", id);
        student = (Student) query.uniqueResult();
        //transaction.commit();
    } catch (HibernateException e) {
        //transaction.rollback();
        e.printStackTrace();
    } finally {
        session.close();
    }
    return student;
}

2 个答案:

答案 0 :(得分:5)

根据hibernate文档数据库或系统,事务边界始终是必需的。在数据库事务之外不会发生与数据库的通信(这似乎使许多习惯于自动提交模式的开发人员感到困惑)。 始终使用明确的事务边界,即使是只读操作。根据您的隔离级别和数据库功能,这可能不是必需的,但如果您始终明确划分事务,则没有任何缺点。当然,即使是读取数据,单个数据库事务也会比许多小事务执行得更好。

您可以在此处参考hibernate documentation

答案 1 :(得分:0)

不,除非您计划在数据库中保留数据,否则不需要使用事务。并且在您的问题中,您不会坚持从数据库中获取记录的日期。所以这里不强制使用交易。