我有两个表与OneToMany关系
class ServiceProvider {... @OneToMany(fetch = FetchType.EAGER,mappedBy =“serviceProvider”,cascade = {CascadeType.ALL,CascadeType.REMOVE},orphanRemoval = true)@OnDelete(action = OnDeleteAction.CASCADE)private list serviceCenters ; ...}类ServiceCenterDetails {... //与ServiceProviderDomainMap @ManyToOne @JoinColumn(name =“SERVICE_PROVIDER_ID”)私有ServiceProvider serviceProvider的双向多对一关联; ...}
我想删除提供行 . 但我得到以下错误:
引起:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败( fixoline
. service_center_details
,CONSTRAINT FK_qvahoxeovx9vmwl6mcu2c0lyw
FOREIGN KEY( SERVICE_PROVIDER_ID
)REFERENCES service_provider
( ID
))
以下是我尝试的方式
String hql =“DELETE FROM ServiceProvider WHERE id =:providerId”;
查询query = sessionFactory.getCurrentSession() . createQuery(hql);
query.setParameter( “providerId”,providerId);
int result = query.executeUpdate();
有人可以帮忙解决它吗?
2 回答
错误消息非常明确:您尝试删除
ServiceProvider
的外键引用 . 首先删除ServiceCenterDetails
:有两个铃,
为什么在
@oneToMany
中使用CascadeType.ALL
时使用@OnDelete
?CascadeType.ALL
将在删除父项时删除子实体 .@OnDelete
主要用于子实体@ManyToOne
否则 .尝试任何选项并检查 .