当前位置: 首页 > 知识库问答 >
问题:

为什么我的Hibernate插入没有反映在我的Hibernate查询中?

虞高雅
2023-03-14

我被要求为基于hibernate的数据访问对象编写一些代码测试。

我想我会从一个简单的测试开始:当我保存一个模型时,它应该在dao.getTheList()返回的集合中。问题是,无论如何,当我调用dao.getTheList()时,它总是一个空集合。

应用程序代码已经在生产中工作,所以让我们假设问题只是出在我的测试代码上。

@Test
@Transactional("myTransactionManager")
public void trivialTest() throws Exception {

    ...
    // create the model to insert
    ...

    session.save(model);
    session.flush();

    final Collection<Model> actual = dao.getTheList();

    assertEquals(1, actual.size());
}

预期测试输出为:

到目前为止,我已经尝试在插入后显式提交,并禁用缓存,但这并不奏效。

我不想成为冬眠大师,也没有足够的时间阅读整个留档。在不知道从哪里开始的情况下,这似乎对社区来说是一个好问题。

在测试的验证步骤执行之前,我可以做些什么来确保我的Hibernate插入被刷新/提交/去缓存/或其他什么?

[编辑]关于我尝试过的内容的其他信息。我尝试手动提交insert和dao调用之间的事务。getTheList(),但我刚刚得到错误,无法回滚Hibernate事务;嵌套异常为org。冬眠TransactionException:事务未成功启动

@Test
@Transactional("myTransactionManager")
public void trivialTest() throws Exception {

    ...
    // create the model to insert
    ...

    final Transaction firstTransaction = session.beginTransaction();
    session.save(model);
    session.flush();
    firstTransaction.commit();

    final Transaction secondTransaction = session.beginTransaction();
    final Collection<SystemConfiguration> actual = dao.getTheList();
    secondTransaction.commit();

    assertEquals(1, actual.size());
}

我还尝试从测试线程中去掉事务性的注释,并注释两个助手方法中的每一个,每个Hibernate作业一个。因此,尽管我得到了错误:没有绑定到线程的Hibernate会话,并且配置不允许在这里创建非事务会话。

[/编辑]


共有1个答案

郝玄天
2023-03-14

我认为只要更改的事务尚未完成,底层DBMS可能会隐藏对其他事务的更改。getTheList是否在额外的事务中运行?您使用的是oracle还是postgres?

 类似资料:
  • 我在配置类中使用spring boot和hibernate。未映射我的实体。请参阅下面的错误。在看了其他一些关于这个的stackoverflow页面后,我仍然无法理解。 我相信以下是正确的:HQL、@实体、@表 错误。 实体。 DAO类 当我将getMessages方法主体替换为以下内容时,它会起作用 数据库表名称为“消息”。 SpringBoot类 Hibernate配置类 我错过了什么?

  • 问题内容: 快速版本 基本上,我正在更新hibernate表,后续查询正在加载陈旧的值。 详细版本 hibernate(3.3.1.GA)和EhCache(2.4.2)。 包含页面的持久对象,我将页面添加到本书的中间。我正在使用Databinder / Wicket,尽管我认为这并不相关。 适用的字段/方法是: 最终结果是,有一个新页面添加到列表中,并且数据库也进行了相应更新,我已经在我的数据存储

  • 我正在做一个装在盒子里的计数器。我试图使这个计数器对不同的屏幕大小做出响应,但由于某些原因,我试图使用的媒体查询将无法工作。 我曾尝试将设备宽度更改为768px以下,但查询对计数器没有影响,我不确定原因。我已经包括了计数器的HTML/PHP代码以及CSS。有人知道为什么它不起作用吗 我已确保此标签包含在文档的标题中。 超文本标记语言: CSS:

  • 我的桌子描述是 我的疑问是 如何使用hibernate执行此查询。Hibernate应该返回类型为的对象列表。?

  • 我不确定该如何表述这个问题,但我目前面临的问题是,为什么我的LoginActivity在启动时没有显示。下面是我的代码 因此,为了让您想要的activity首先显示,您必须替换您想要的右侧上方的那个?但替换后,不知何故我的loginActivity并不是显示的第一个屏幕。我尝试将忘记帐户和signupActivity替换为启动时显示的第一个屏幕,并且两者都按预期显示。然而,对于我的LoginAct

  • 问题内容: 有什么用的,并在Hibernate?因为我在互联网上发现的每个示例都将数据插入到单个表中,并使用两个不同的类来做到这一点。我的观点是,如果我使用单个表,那么我可以在单个类中映射所有列,那么为什么要使用不同的类。如果我们使用两个不同的表,则存在和hibernate关系。 问题答案: Hibernate 1中有两种对象。Value Object2 。实体 价值对象 是不能独立存在的对象。以