我编写了以下代码来从数据库中检索数据,我们是否需要开始交易?因为它运行没有任何问题。是否有必要每次都使用它?如果没有它,它会在未来引起任何问题吗?
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;
}
答案 0 :(得分:5)
根据hibernate文档数据库或系统,事务边界始终是必需的。在数据库事务之外不会发生与数据库的通信(这似乎使许多习惯于自动提交模式的开发人员感到困惑)。 始终使用明确的事务边界,即使是只读操作。根据您的隔离级别和数据库功能,这可能不是必需的,但如果您始终明确划分事务,则没有任何缺点。当然,即使是读取数据,单个数据库事务也会比许多小事务执行得更好。
您可以在此处参考hibernate documentation。
答案 1 :(得分:0)
不,除非您计划在数据库中保留数据,否则不需要使用事务。并且在您的问题中,您不会坚持从数据库中获取记录的日期。所以这里不强制使用交易。