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

使用分离实体的Spring数据/JPA/Hibernate测试save调用

轩辕涵亮
2023-03-14

我有一个Java应用程序,它使用Spring数据(带有JPA和Hibernate)通过服务层和存储库层与数据库交互。大多数都很好,但我在测试组合对象的save调用时遇到了一个问题:

涉及三个对象:

  • 从数据库中获取的对象A

(Cascade设置为合并并持久化)

现在,当尝试使用对象C的服务来保存它时,我得到了一个分离的实体异常。当将@Transactional放在测试方法之上时,我无法检查数据库的状态,因为事务仍然处于打开状态。(使用@Transactional将对象的检索和创建保存调用放在单独的方法中根本没有任何作用。尝试获取实体管理器并刷新它也没有帮助。)

我相信这可能是一个常见的问题(或者只是我这边的误解),但我还没有找到任何解决方案,如果有任何建议,我将不胜感激。

正在使用的版本:

  • Spring4.0.5
  • JPA 2.1
  • Hibernate4.3.5

共有2个答案

施昊然
2023-03-14

升级到Spring 4.1.0帮助我解决了这个问题。在Spring 4.1.0中,有一个新的类TestTransaction,它可以在事务期间提交(在我的情况下,我需要一个事务类以避免分离实体),因此您可以检查数据库的状态。

似乎您必须关闭连接才能真正提交,然后重新打开它以检查数据库。我使用了如下提交调用:

private void commit() {
    TestTransaction.flagForCommit();
    TestTransaction.end();
    TestTransaction.start();
}

如果你知道一种更容易/更好的用法,请告诉我。但这对我起到了作用。

胡曾笑
2023-03-14

您必须首先持久化对象B,或将级联属性添加到关系注释中,例如:。

@OneToMany(cascade = CascadeType.ALL, mappedBy = "field")

这将通过关系级联所有操作。

 类似资料:
  • 问题内容: 我开始使用Spring Data JPA在Spring Boot应用程序上进行工作,以在用户和角色之间建立ManyToMany关系。 此关系在User类中定义如下: 我使用以下角色创建角色: 之后向用户分配角色失败: 引发以下异常(为便于阅读而设置格式): 但是,如果在创建关系之前保存了用户,则可以正常工作: 我不得不两次保存/更新用户似乎有些不合理。有什么方法可以在不先保存 用户的

  • JPA和Hibernate的新手,所以请耐心等待,因为我试图绘制一整张图片。所以我有两个具有双向关系的Java对象。员工类是拥有类,部门类是关系的反面。一个部门可以有许多员工,一个员工只能有一个部门。我分配了employee_id作为员工实体的主键,department_id作为部门实体的主键。我还想在员工类中使用department_id作为外键。 员工类 部门类 我用来生成两个对象并将它们保存

  • 我在Spring boot版本1.3.6中使用Spring Data JPA。 null 这将返回父实体,而不是子实体。 知道怎么做吗?

  • 我正在尝试持久化一个与其他已经持久化的对象具有多对多关系的对象。 下面是我的持久化对象(它们已经在db中持久化了,这是一个MySql):- 产品 这是我的no persisted对象,我正在尝试创建它 这是我的类,它接收产品名称的数组,使用该名称查看产品并将其放入reservation对象。 下面是我的接口: 严重:路径为[/web]的上下文中servlet[dispatcher]的servlet

  • 我已经使用Spring Data JPA AuditingEntityListener和AuditorAware bean设置了JPA审计。我想要的是即使在具有预定义标识符的实体上也能够持久化审计师详细信息。问题是,当具有预定义id的JPA实体被持久化和刷新时,它的审计师详细信息无法持久化: 对象引用未保存的临时实例-在刷新之前保存临时实例:me。审计道。审计详情 有趣的是,当保存具有生成id的实

  • 我使用的是Spring Boot 4、Hibernate和JPA注释。我遇到了这个错误 组织。冬眠PersistentObjectException:传递给persist的分离实体。 我试着在互联网上搜索,但没有找到正确的答案。我尝试使用而不是,但没有成功。此外,我认为在更新资源时使用。 这是我的代码: ` `积垢服务 ` ` 存储库 ` '抽象存储库 ` ` 工厂` '支持形式 ` ` 控制器