Ich habe zwei Entitäten, Testcase und TestCaseStep, wie folgt definiert:JPA - unidirektionale Beziehung enthält Liste mit doppelten Einträgen
Testcase
@Entity
@Table(name = "TEST_CASE")
public class TestCase implements Serializable, TestCase
{
@Id
@Column(name = "name")
private String name;
@OneToMany(fetch = FetchType.EAGER)
@JoinTable(name = "Testcase_Step_Association", joinColumns = { @JoinColumn(name = "TC_NAME", referencedColumnName = "NAME") }, inverseJoinColumns = {
@JoinColumn(name = "STEP_NAME", referencedColumnName = "NAME") })
@OrderColumn(name = "STEP_NUMBER", nullable = false)
private List<TestCaseStep> testCaseSteps;
[...]
}
TestCaseStep
@Entity
@Table(name = "TEST_CASE_STEPS")
public class TestCaseStep implements Serializable, TestCaseStep
{
@Id
@Column(name = "name")
private String name;
[...]
}
Diese funktioniert gut, solange ich nicht versuche, das gleiche Objekt in die Liste von einzufügen Testfallschritte mehr als einmal. Sobald ich versuche, dass, erhalte ich eine primäre Schlüsselverletzung:
Caused by: org.h2.jdbc.JdbcSQLException: Eindeutiger Index oder Prim�rschl�ssel verletzt: "PRIMARY_KEY_9 ON PUBLIC.TESTCASE_STEP_ASSOCIATION(TC_NAME, TESTCASESTEPS_NAME) VALUES ('TESTCASE_1', 'OUT_STEP', 395)"
Unique index or primary key violation: "PRIMARY_KEY_9 ON PUBLIC.TESTCASE_STEP_ASSOCIATION(TC_NAME, TESTCASESTEPS_NAME) VALUES ('TESTCASE_1', 'OUT_STEP', 395)"; SQL statement:
INSERT INTO Testcase_Step_Association (testCaseSteps_NAME, TC_NAME, STEP_NUMBER) VALUES (?, ?, ?) [23505-191]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
at org.h2.message.DbException.get(DbException.java:179)
at org.h2.message.DbException.get(DbException.java:155)
at org.h2.index.BaseIndex.getDuplicateKeyException(BaseIndex.java:107)
at org.h2.mvstore.db.MVSecondaryIndex.checkUnique(MVSecondaryIndex.java:230)
at org.h2.mvstore.db.MVSecondaryIndex.add(MVSecondaryIndex.java:189)
at org.h2.mvstore.db.MVTable.addRow(MVTable.java:704)
at org.h2.command.dml.Insert.insertRows(Insert.java:156)
at org.h2.command.dml.Insert.update(Insert.java:114)
at org.h2.command.CommandContainer.update(CommandContainer.java:98)
at org.h2.command.Command.executeUpdate(Command.java:258)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:160)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:146)
at com.sun.gjc.spi.base.PreparedStatementWrapper.executeUpdate(PreparedStatementWrapper.java:125)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:892)
... 193 more
Ich brauche meine Benutzer zu ermöglichen, den gleichen Testfall Schritt mehrmals zu wiederholen. Wie kann ich dies erreichen, ohne eine separate Entität zu verwenden, um die Beziehung selbst abzubilden?
Ändern Sie das DDL-Skript so, dass die Bestellspalte Teil des PK für die Join-Tabelle ist, obwohl EclipseLink keine Duplikate gemäß http://stackoverflow.com/questions/15690347/persist-a-list-with unterstützt -order-and-duplikate-in-jpa-eclipselink – Chris
Nun, das ist peinlich. Ich habe einige Recherchen vor dem Posten gemacht, bin aber nie auf diesen Posten gestoßen. Vielen Dank! Ich werde den Fehler sofort abstimmen. – Kubus