我有两个实体,TestCase和TestCaseStep,定义如下:
测试用例
@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;
[...]
}
只要我不尝试将同一个对象多次插入测试用例步骤列表中,这样就可以正常工作。一旦我尝试,我就会遇到主要密钥违规行为:
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
我需要允许我的用户多次重复相同的测试用例步骤。如何在不使用单独的实体来自己映射关系的情况下实现这一目标?
答案 0 :(得分:0)
不要将名称定义为TestCase和TestCaseSteps实体中的主键,而是尝试将代理键定义为主键,其中将该代理键的生成策略保持为 AUTO 强>
通过这种方式,您可以在重新运行测试用例时创建一个新的插入。