一尘不染

将选择语句放在休眠事务中

hibernate

我已经阅读了一段时间有关Hibernate的文章,但我似乎无法理解有关Hibernate的一个概念Transaction

在我访问过的某些网站上,Select报表处于这种交易模式。

public List<Book> readAll() {
    Session session = HibernateUtil.getSessionFactory()
            .getCurrentSession();
    session.beginTransaction();
    List<Book> booksList = session.createQuery("from Book").list();
    session.getTransaction().commit();
    return booksList;
}

在某些站点上时,它不主张对Select语句使用事务:

public List<Book> readAll() {
    Session session = HibernateUtil.getSessionFactory()
            .getCurrentSession();
    List<Book> booksList = session.createQuery("from Book").list();
    return booksList;
}

我在考虑应该跟随哪一个。是否需要对Select帐单进行交易?


阅读 251

收藏
2020-06-20

共1个答案

一尘不染

这取决于用例。

在典型的CRUD样式的Web应用程序中,常见的实体配置是使用版本控制和乐观锁定。(hibernate注释文档) 如果应用程序使用乐观锁定,则脏读可能不是那么重要,并且不需要将select放入事务中。

如果脏读是不可接受的,则适合进行选择的事务。大多数情况下,在这种情况下,选择将与需要在某个时间点保持完全一致性的某些数据修改一起完成。

2020-06-20