【问题标题】:Putting Select Statement on Hibernate Transaction将 Select 语句放在 Hibernate 事务中
【发布时间】:2011-01-03 06:47:32
【问题描述】:

我一直在阅读有关 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 语句是否需要交易?

【问题讨论】:

    标签: java hibernate orm


    【解决方案1】:

    这取决于用例。

    在典型的 CRUD 样式 Web 应用程序中,常见的实体配置是使用版本控制和乐观锁定。 (hibernate annotation docs) 如果应用程序使用乐观锁,脏读可能没那么重要,也没有必要将 select 放在事务中。

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

    【讨论】:

      【解决方案2】:

      session.getTransaction().commit() 用于将您的更改持久化到数据库中,如果您在数据库中进行了插入或更新等更改,请使用它

      【讨论】:

      • 请使用真实语言,你不合适
      • @SeanPatrickFloyd 你是谁来决定哪种语言合适?!对我来说,告诉人们如何说话似乎既不具建设性又粗鲁——我认为这种行为是不恰当的
      • @mojojojo 我不是决定的人,决定是由网站所有者做出的。 English is the official language, leet speak 是不可接受的英语。
      • @SeanPatrickFloyd 在该文档中没有关于使用缩减的消息。所以这让我们和你一起用荒谬的借口跑题并开始传教
      【解决方案3】:

      据我所知,hibernate 需要对所有事物进行事务处理。尝试在没有事务的情况下运行它,看看它是否失败。

      我最近一直在将它与 spring 和 JPA 一起使用,如果我忘记打开事务(通过注释),则会启动一个只读事务。但这可能是特定于春季的。

      【讨论】:

        【解决方案4】:

        您可以选择在此处使用交易,因为无论哪种方式都可以获得相同的结果。

        除非您要对数据进行一些更改,否则您不需要事务。有些人希望在与 DB 交互时总是有一个事务,但这只是一个约定。在这种情况下,您可以使用session.setFlushMode(FlushMode.NEVER); 来使用只读事务

        另外你最好使用

        session.createCriteria(Book.class).list();

        因为任何重构都会自动更改查询。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-20
          • 2016-09-01
          • 2017-01-16
          • 2014-03-03
          • 2011-10-03
          • 1970-01-01
          • 2016-06-13
          • 2019-08-31
          相关资源
          最近更新 更多