NoPrimaryKeyException de DBUnit lors du chargement d'un ensemble de données dans une base de données

StackOverflow https://stackoverflow.com/questions/2318037

  •  22-09-2019
  •  | 
  •  

Question

Je reçois NoPrimaryKeyException lorsque je tente d'exécuter l'un de mes tests unitaires qui utilise DBUnit. Le DataTable est créé en utilisant Hibernate et une table de jointure entre deux classes mapper une relation plusieurs à plusieurs. Les annotations qui définissent la relation sont les suivantes:

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

Les autres entrées dans le fichier XML que je utilise pour définir l'ensemble de données semblent fonctionner correctement, mais pas la table de jointure. Je reçois l'exception suivante:

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)

l'entrée Dataset en question ressemble à ceci:

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

correspond avec la base de données qui a des champs comme clés primaires (Le Databse est MS SQL Server si cela aide) Il y a des entrées correspondantes dans les deux tables jointes définies dans le code XML suivant:

<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>

Dois-je définir les clés primaires dans les annotations de mise en veille prolongée? Si oui, comment puis-je le faire? je dois changer la façon dont je définir mon ensemble de données implique que les deux colonnes sont une clé primaire commune?

Je ne suis pas très compétent avec mise en veille prolongée ou DBUnit pour cette question et je suis à la fin de mon esprit de sorte que toute aide serait vraiment apprécié.

Était-ce utile?

La solution

  

Dois-je définir les clés primaires dans les annotations de mise en veille prolongée? Si oui, comment dois-je faire?

Oui, vous le faites, c'est l'une des choses ne peut pas deviner pour vous Hibernate / JPA. Pour ce faire, annote la propriété contenant l'identifiant (ou le getter de cette propriété) avec le annotation @Id .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top