java - 从数据库中删除一个简单的行
问题描述
我有 2 张桌子,并且testInput
我有一个带有另一张桌子 id 的 FK。testCases
testInput
所以基本上我要删除的行是输入的 id、testCase 的 id、名称和描述。
'43', '21', 'USERNAME', 'USERNAME'
'44', '21', 'PASSWORD', 'PASSWORD'
我试图删除该行,我得到
java.sql.SQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败(
mydb
.testInput
, CONSTRAINTfk02
FOREIGN KEY (testCase
) REFERENCEStestCases
(idtestCase
) ON DELETE NO ACTION ON UPDATE NO ACTION)
我不想删除testCase的记录。我只想删除该测试用例的输入。我该怎么办?
如果你想要代码...
List<TestInput> previousInputs = TestInput.getInputs(testCaseName);
for(TestInput in : previousInputs) {
Database.deleteObject(in);
}
//delete the object to the database
public static void deleteObject(Object object) {
SessionFactory factory = HibernateUtil.getSessionFactory();
Session session = factory.openSession();
Transaction tx = null;
try{
tx = session.beginTransaction();
session.delete(object);
tx.commit();
}catch (HibernateException e) {
if (tx!=null) tx.rollback();
e.printStackTrace();
}finally {
session.close();
}
}
xml 测试用例
<hibernate-mapping>
<class name="TestCase" table="testCases">
<meta attribute="class-description">
This class contains the testCases details.
</meta>
<id name="id" type="int" column="idtestCase">
<generator class="native"/>
</id>
<property name="name" column="name" type="string"/>
<many-to-one name="type" class="TestType" column="type" fetch="select" lazy="false"/>
<property name="data" column="data" type="binary"/>
<property name="amountOfInputs" column="amountOfInputs" type="int"/>
<property name="creationDate" column="creationDate" type="string"/>
<property name="createdBy" column="createdBy" type="string"/>
<many-to-one name="tellerConfig" class="TellerConfiguration" column="tellerConfig" fetch="select" lazy="false"/>
</class>
</hibernate-mapping>
xml 测试输入
<hibernate-mapping>
<class name="TestInput" table="testInput">
<meta attribute="class-description">
This class contains the testCases input details.
</meta>
<id name="id" type="int" column="idtestInput">
<generator class="native"/>
</id>
<property name="name" column="name" type="string"/>
<property name="description" column="description" type="string"/>
<many-to-one name="testCase" class="TestCase" column="testCase" fetch="select" cascade="all" lazy="false" />
</class>
解决方案
将外键 fk02 的约束从“NO ACTION”更改为“SET NULL”
FOREIGN KEY (idtestcase)
REFERENCES testCases(idtestCase)
ON DELETE SET NULL
推荐阅读
- javascript - 有没有更好的方法来(取消)选择 HighCharts LineChart 中的所有 LegendItems?
- rabbitmq - 如何从外部秘密设置兔子密码?
- c - 函数中的 Free() 函数使我的整个程序在 c 中崩溃
- sql - 空数组在 PostgreSQL 中是否等于 NULL,还是里面有 NULL 的数组?
- python - 合并具有不同键列的两个表
- spring-boot - Liquibase 无法正确启动
- jdbc - 带有 Cosmos db 的石英
- python-3.x - 从列表中删除 \n
- linux - 即使在 Linux 中没有活动客户端也可以继续执行
- python - UFuncTypeError:ufunc 'subtract' 不包含具有签名匹配类型的循环(dtype('
dtype(' 我尝试运行此功能并收到如下编码所述的错误。请帮我解决它。
outliers = []