当前位置: 首页 > 面试题库 >

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

颛孙正谊
2023-03-14
问题内容

我已经阅读了一段时间有关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帐单进行交易?


问题答案:

这取决于用例。

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

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



 类似资料:
  • 问题内容: 我正在尝试将新记录插入到我之前知道是唯一的表中。我试过在对象上调用save(),但是这样做在执行任何INSERT之前会执行一堆SELECT语句,我不想​​这样做,因为我知道对象已经是唯一的。 我为每个交易都打开了一个新会话,可以看到这是一个问题,但这是我的工作范围的限制。有什么办法可以强迫Hibernate在插入之前不做任何选择? 问题答案: 您可以使用persist()方法而不是sa

  • 问题内容: 目前,我在 每个 Controller方法中 都 重复了以下代码: 这是正确的方法还是有更好的方法,也许在一个我可以引用的单独的类中?如果是这样,怎么办?每当我尝试将其放在单独的类中并从其他类中引用它时,它都会失败。 编辑 :我正在尝试使用尽可能少的外部库。如果Java在JDK中内置了ORM / JPA实现,我就不会使用Hibernate。 问题答案: 我本人已经遇到了很多次。通常,我

  • 问题内容: Hibernate 文档显示了以下示例: 即使仅打印了事件列表,为什么仍需要执行? 问题答案: SELECT还需要事务。没有任何事务就无法执行SELECT。使用某些SQL GUI工具从数据库中选择数据时,不必显式启动和结束事务,这是因为这些工具正在使用自动提交模式。在自动提交模式下,数据库将为每个SQL语句自动启动并提交事务,这样您就不必显式声明事务边界。 如果您不结束(即提交或回滚)

  • 问题内容: 我正在尝试做这样的事情,但使用代替: 用户是与联接表UserDomain 有关系的实体。这里的重点只是找到链接到具有id =“ XXX”的用户。 似乎应该很简单…但是到目前为止我还没有运气找到任何有用的文档。 问题答案: 我终于找到了。事实证明,这毕竟并不难……一旦您知道! 是的,有人盯着我看Javadoc:http : //www.dil.univ- mrs.fr/~massat/d

  • 问题内容: 我想使用Hibernate从文件运行本机SQL。SQL可以包含创建数据库结构的多个语句(即表,约束,但没有insert / update / delete语句)。 示例,下面是一个非常简单的查询(包含以下两个SQL语句) 我正在使用MySQL数据库,当我运行上述查询时,我返回了gettng语法错误。当我一一运行它们时,就可以了。 下面是运行查询的代码(上面的语句已分配给“ sql”变量

  • 问题内容: 我有一个专门用于通过休眠的持久层将数据持久保存在db中的类。 问题在于它不保留数据。 堆栈是: 但我必须指出,它在其他课程中也能正常工作。 更新 : 当我把它印出来的时候给我。 更新 我试图获得更多有关该错误的信息: 我知道问题出在哪里: 实际上,该表对同一张表有2 fk ,而我,我坚持的是 问题答案: 可能引发了异常。这意味着该子句中没有要回滚的活动事务。这就是为什么引发另一个异常(