尝试删除job
对象时出现以下错误:
com.mysql.jdbc.exceptions.jdbc4.mysqlintegrityConstraintViolationException:无法删除或更新父行:外键约束失败(www
.subcategory
,constraintfk_subcategory_category
外键(category_id
)在删除时引用category
(category
(id
)不执行更新时不执行任何操作)
表格
+============+ +=================+ +================+
| job | | job_category | | category |
+============+ +=================+ +================+
| ID | | JOB_ID | | ID |
| | | CAT_ID | | |
+============+ +=================+ +================+
+==================+ +=================+
| job_subcategory | | subcategory |
+==================+ +=================+
| JOB_ID | | ID |
| SUBCAT_ID | | CATEGORY_ID |
+==================+ +=================+
作业
可以有许多类别
。一个类别
可以有许多子类别
。
job.java
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "job_category", joinColumns = {
@JoinColumn(name = "JOB_ID", referencedColumnName = "ID") }, inverseJoinColumns = {
@JoinColumn(name = "CAT_ID", referencedColumnName = "ID") })
private Set<Category> categories;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "job_subcategory", joinColumns = {
@JoinColumn(name = "JOB_ID", referencedColumnName = "ID") }, inverseJoinColumns = {
@JoinColumn(name = "SUBCAT_ID", referencedColumnName = "ID") })
private Set<SubCategory> subCategories;
@JsonIgnore
@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER, mappedBy = "category")
private Set<SubCategory> subCategories;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name = "CATEGORY_ID")
private Category category;
protected void remove(Job entity) {
entityManager.remove(entity);
}
删除job
对象时,希望它从job
表和联接表(job_category
和job_subcategory
)中删除一行,但不删除category
和subcategory
表。
感谢任何建议。
更新
public boolean delete(Job job) {
Set<SubCategory> subCategories = job.getSubCategories();
if (subCategories != null) {
for (SubCategory subCategory : subCategories) {
entityManager.remove(subCategory);
}
}
Set<Category> categories = job.getCategories();
if (categories != null) {
for (Category category : categories) {
entityManager.remove(category);
}
}
entityManager.remove(job);
return true;
}
无法删除或更新父行:外键约束失败(www
。job_subcategory
,约束fk_job_subcategory
外键(subcat_id
)在删除时引用subcategory
(id
,在更新时没有操作)
该错误只在我完成事务(@transactional
)时发生,因此看起来就像是在Hibernate执行提交时发生的。
更新
我尝试以下方法:
public boolean delete(Job job) {
job.setSubCategories(null);
job.setCategories(null);
super.remove(job);
return true;
}
但再次获得以下内容:
public boolean delete(Job job) {
job.setSubCategories(null);
job.setCategories(null);
job.setPerson(null);
super.remove(job);
return true;
}
好吧,试试看
public boolean delete(Job job) {
Set<SubCategory> subCategories = job.getSubCategories();
if (subCategories != null) {
job.getSubCategories().clear();
for (SubCategory subCategory : subCategories) {
subCategory.setJob(null);
entityManager.remove(subCategory);
}
}
Set<Category> categories = job.getCategories();
if (categories != null) {
job.getCategories().clear();
for (Category category : categories) {
category.setJob(null);
entityManager.remove(category);
}
}
job.setPerson(null);
//if necessary:
//Person.setJob(null);
entityManager.remove(job);
return true;
}
另外,为什么您有super.remove(job)
,而没有EntityManager.remove(job)
,就像我刚刚发布的代码那样?
这段代码是否仍有异常?
问题内容: 进行时: 错误: 这是我的桌子: 问题答案: 照原样,必须先删除Advertisers表中的行,然后才能删除它引用的Jobs表中的行。这个: …实际上与应有的相反。实际上,这意味着您必须在作业表中有一条记录,然后才是广告商。因此,您需要使用: 纠正外键关系后,您的delete语句将起作用。
我还在学习hibernate中的很多东西,以及如何处理hibernate中表与表之间的关系,所以在我的一个项目中,我面临着以下问题: 问题出在哪里? 我想做什么? 我正在尝试删除package实体,但不删除package表中引用的用户 我正在通过packageDAO对package实体调用delete
我将按id删除对象,但出现如下错误: com。mysql。jdbc。例外情况。jdbc4。MySQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败(,constraint外键()引用) 我按id删除的方法是: 我的表的映射看起来像: Selection.java 作业Audit.java 审核组。JAVA AssignmentAudit
我在这里使用了多对一双向关系,一旦我被放入数据库,我就不能删除文件,如果我试图删除,我会遇到异常,无法删除或更新父行:外键约束失败。 这是我的另一个实体类... 嗨这是我的完整栈迹
问题内容: 我正在研究一个基本示例来测试操作,但出现异常。 我有以下实体: Employee.java EmpDetails.java 现在我在数据库中有员工ID为10的记录,在员工详细信息表中有相应的记录。 现在,当我在查询下面运行时: 我在想hibernate将删除员工记录和相应的员工详细信息记录,因为我已设置要删除的层叠类型。但我得到异常为: 引起原因:com.mysql.jdbc.exce
现在,当我运行命令php artisan migrate时出现问题,它成功地迁移了我的所有表,但当我运行rollback命令时,它会抛出错误,错误是出于我的目的 我的专业移民: 即使我使用onDelete(“cascade”),我也不知道问题出在哪里。我们将非常感谢您的帮助!