将数据集加载到数据库时,DBUnit 出现 NoPrimaryKeyException

2024-03-24

当我尝试运行使用 DBUnit 的单元测试之一时,我收到 NoPrimaryKeyException。数据表是使用 Hibernate 创建的,是映射多对多关系的两个类之间的连接表。定义关系的注解如下:

@Override
@ManyToMany
@JoinTable(name="offset_file_offset_entries", joinColumns={@JoinColumn(name="offset_entry_id")},inverseJoinColumns={@JoinColumn(name="file_description_id")})
public List<OffsetEntry> getOffsets() {

我用来定义数据集的 XML 文件中的其他条目似乎工作正常,但连接表则不然。我得到以下异常:

org.dbunit.dataset.NoPrimaryKeyException: offset_file_offset_entries
    at org.dbunit.operation.UpdateOperation.getOperationData(UpdateOperation.java:72)
    at org.dbunit.operation.RefreshOperation$UpdateRowOperation.<init>(RefreshOperation.java:266)
    at org.dbunit.operation.RefreshOperation.createUpdateOperation(RefreshOperation.java:142)
    at org.dbunit.operation.RefreshOperation.execute(RefreshOperation.java:100)
    at org.dbunit.ext.mssql.InsertIdentityOperation.execute(InsertIdentityOperation.java:217)
    at uk.co.sabio.obscheduler.application.dao.AbstractBaseDatabaseTest.setUp(AbstractBaseDatabaseTest.java:57)
    at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests.runManaged(AbstractJUnit38SpringContextTests.java:332)
    at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests.access$0(AbstractJUnit38SpringContextTests.java:326)
    at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests$1.run(AbstractJUnit38SpringContextTests.java:216)
    at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests.runTest(AbstractJUnit38SpringContextTests.java:296)
    at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests.runTestTimed(AbstractJUnit38SpringContextTests.java:253)
    at org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests.runBare(AbstractJUnit38SpringContextTests.java:213)
    at junit.framework.TestResult$1.protect(TestResult.java:110)
    at junit.framework.TestResult.runProtected(TestResult.java:128)
    at junit.framework.TestResult.run(TestResult.java:113)
    at junit.framework.TestCase.run(TestCase.java:124)
    at junit.framework.TestSuite.runTest(TestSuite.java:232)
    at junit.framework.TestSuite.run(TestSuite.java:227)
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

有问题的数据集条目如下所示:

<offset_file_offset_entries offset_entry_id="1" file_description_id="1" />

并与将两个字段作为主键的数据库进行匹配(数据库是 MS SQL Server,如果有帮助的话)在以下 xml 中定义的连接的两个表中有相应的条目:

<dataset>
    <file_description file_path="src/test/resources/" file_pattern=".txt" file_description_id="1"/>
    <offset_file_description file_description_id="1"/>
    <offset_entries offset_entry_id="1" field_name="Field1" field_length="10" start_index="0"/>
    <offset_file_offset_entries offset_entry_id="1" file_description_id="1" />  
</dataset>

我必须在 hibernate 注释中定义主键吗?如果是这样我该怎么做?我是否必须更改定义数据集的方式以暗示这两列是联合主键?

在这方面我对 hibernate 或 DBUnit 不是很精通,而且我已经束手无策了,所以任何帮助将不胜感激。


我必须在 hibernate 注释中定义主键吗?如果是这样,我该怎么做?

是的,你知道,这是 Hibernate/JPA 无法为你猜测的事情之一。为此,请使用以下注解保存标识符的属性(或该属性的 getter)@Id注解 http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-mapping-identifier.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将数据集加载到数据库时,DBUnit 出现 NoPrimaryKeyException 的相关文章

随机推荐

  • 如何从 OpenSSL 中的 perl 脚本生成程序集文件

    在 OpenSSL 版本 1 1 0e 的开源代码中 我看到一些函数定义是由文件夹中存在的 perl 文件生成的 在加密货币内每个文件夹中的 build info 文件中 他们编写了一些行以从相应的 pl 生成 s 例如 为了生成aes p
  • Android 上的可写和可执行位置

    我已经使用 Android NDK 工具链编译了一个二进制文件 并尝试将其部署到设备上 然后 使用 JNI 使用 NDK 构建的应用程序将通过本机代码执行此二进制文件 我希望避免对设备进行root 该二进制文件将由多个应用程序使用 因此我想
  • 如何访问 docker 容器内的 mac os x 麦克风?

    我正在运行一个带有 python 代码的 docker 容器 该容器使用主机 MacBook Pro 内置麦克风录制几秒钟的声音 我面临的部分挑战是确定如何在 Docker 容器内提供访问 共享 Macbook Pro 麦克风 大多数关于堆
  • 数据库在更新时应用所有以前的迁移,而不仅仅是新的迁移

    我正在开发一个网站 截至目前 该网站既有生产数据库又有测试数据库 生产数据库托管在外部 而测试数据库托管在本地 每当我对数据库进行更改时 我都会通过迁移应用更改 添加新的迁移后 我运行更新数据库对我的生产和测试数据库执行命令以保持它们同步
  • 如何在 Spring data r2dbc 中替换 @PrePersist

    我在用spring boot starter data r2dbc 版本 1 1 3 Spring Webflux 应用程序中的模块 我想将实体生命周期回调添加到我的持久层 使用 Spring Data JPA 可以使用注释 例如 PreP
  • 如何在 EF7 或 EF core 中的运行时更改数据库架构

    我的数据库有不同的架构 具体取决于运行时的用户选择 我的代码如下 public partial class FashionContext DbContext private string schema public FashionConte
  • CSS 中的双冒号 (::) 是什么意思?

    双冒号 在 CSS 中意味着什么 例如 input type text ms clear display none 它的意思是伪元素选择器 这意味着element右边在普通 DOM 中不存在 但可以选择 伪元素由两个冒号 后跟伪元素的名称组
  • MigraDoc:设置文档字体

    我想在 MigraDoc 中使用不同的字体 但我很难让它坚持下来 目前 我正在使用以下代码 我将其作为类范围变量 String tPdfFont MonospaceTyperwriter 然后是 MigraDoc 代码本身 Document
  • 对...()感到困惑?

    In 另一个问题 https stackoverflow com a 12417320 636656 sapply substitute as character 在函数内部使用来获取传递给函数的名称 这as character部分听起来不
  • 使用php将单词数组转换为字符串

    我有一系列关键字 数组 gt 房子 桌子 马 树 我需要从中创建一个字符串 如下所示 房子 桌子 马 树 我怎样才能用 PHP 做到这一点 Use implode https www php net manual en function i
  • Xamarin Shell:将多个参数传递到另一个页面

    我的 Xamarin Forms Shell 应用程序中有两个页面 一个是列表页面 另一个是详细信息页面 当我选择列表页面中的项目时 将显示详细信息页面 我能够将一个参数传递到第二页 我知道如何传递第二个值 但是我应该如何接收第一个属性本身
  • 设置 llvm::ConstantInt 的值

    我正在玩 LLVM 我考虑过改变中间代码中常量的值 然而对于班级llvm 常量Int http llvm org docs doxygen html classllvm 1 1ConstantInt html 我没有看到设置值函数 知道如何
  • f77 未格式化二进制文件的内容

    我有一个 f77 未格式化的二进制文件 我知道该文件包含 2 个浮点数和一个长整数以及数据 文件的大小为 536870940 字节 应包含 512 3 个浮点数据值以及 2 个浮点和长整数 512 3 个浮点数据值组成 536870912
  • 将 HTML 文件导入到另一个 HTML 文件中

    我想知道如何将 HTML 文件导入到其他 HTML 文件中 这两个文件都引用许多不同的文件 因此我更愿意将它们保存在两个不同的文件夹中 而不是将一个文件复制到另一个文件中 目前 我正在使用 Django 进行本地开发 include fil
  • keycloak 上是否有用于更改用户密码的 API 调用?

    我正在尝试实现自己的表单来更改用户的密码 我试图在 Keycloak 中找到用于更改用户密码的 API 但在文档中找不到任何内容 有API可以做到这一点吗 您可以使用PUT auth admin realms realm users id
  • 调用渲染与绘制 DOM?

    我正在学习 React 并试图更好地理解生命周期和不同阶段 我刚刚读到的一件事是 React 首先渲染然后安装元素 在这种情况下渲染意味着调用类的 render 而不是绘制 DOM 我想我只是不太明白这意味着什么 有人可以用简单的方式或举例
  • Ansichar 和 char 有什么区别? [复制]

    这个问题在这里已经有答案了 我最近遇到了这种数据类型不匹配的情况 这是我以前从未见过的 我希望有人能解释它们是什么以及它们有何不同 我得到的错误是 F2063 DCC 错误 E2010 不兼容的类型 AnsiChar 和 Char 历史上在
  • 增加 ulimit Mac OS X 10.8

    I m learning MongoDB and when I start the mongo shell a wild warning message appeared It says 我如何更改 软限制 我使用的是 Mac OSX 10
  • 如何删除 Hudson 的构建工件?

    我们使用 Hudson 作为我们的持续集成服务器 它非常棒 我们有两个问题 它们有轻微的相关性 https hudson dev java net issues show bug cgi id 2736 https hudson dev j
  • 将数据集加载到数据库时,DBUnit 出现 NoPrimaryKeyException

    当我尝试运行使用 DBUnit 的单元测试之一时 我收到 NoPrimaryKeyException 数据表是使用 Hibernate 创建的 是映射多对多关系的两个类之间的连接表 定义关系的注解如下 Override ManyToMany