Pregunta

Me estoy NoPrimaryKeyException cuando trato de ejecutar una de mis pruebas de unidad que utiliza DBUnit. La tabla de datos se ha creado usando Hibernate y es una tabla de unión entre dos clases para asignar una relación de muchos a muchos. Las anotaciones que definen la relación son los siguientes:

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

Las otras entradas en el archivo XML que estoy usando para definir el conjunto de datos parece que funcionan bien, pero no la tabla de unión. Me da la siguiente excepción:

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)

la entrada de conjunto de datos en apariencia pregunta como esta:

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

Y coincide con la base de datos que tiene dos campos como claves primarias (El Databse es MS SQL Server si eso ayuda) Hay correspondientes entradas en las dos tablas estando unidas se define en el siguiente 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>

¿Tengo que definir las claves principales en las anotaciones de hibernación? Si es así? ¿Cómo lo hago? ¿tengo que cambiar mi manera de definir mi conjunto de datos que implica que las dos columnas son una clave principal en las articulaciones?

No soy muy hábil con hibernación o DBUnit para el caso y yo estoy en mi extremo de los ingenios por lo que cualquier ayuda sería muy apreciada.

¿Fue útil?

Solución

  

¿Tengo que definir las claves principales en las anotaciones de hibernación? Si es así, ¿cómo lo hago?

Sí, lo hace, esta es una de las cosas Hibernate / JPA no puede adivinar por ti. Para ello, anotar la propiedad que sostiene el identificador (o el getter para esta propiedad) con el @Id anotación .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top