Reputation: 149
I have two tables with OneToMany relation
class ServiceProvider {
...
@OneToMany(fetch=FetchType.EAGER,mappedBy="serviceProvider", cascade={CascadeType.ALL,CascadeType.REMOVE},orphanRemoval = true) @OnDelete(action=OnDeleteAction.CASCADE) private List serviceCenters; ...
}
class ServiceCenterDetails {
... //bi-directional many-to-one association to ServiceProviderDomainMap @ManyToOne @JoinColumn(name="SERVICE_PROVIDER_ID") private ServiceProvider serviceProvider;
...
}
I am trying to delete provide row. But i am getting below error:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (fixoline
.service_center_details
, CONSTRAINT FK_qvahoxeovx9vmwl6mcu2c0lyw
FOREIGN KEY (SERVICE_PROVIDER_ID
) REFERENCES service_provider
(ID
))
below is the way i am trying
String hql = "DELETE FROM ServiceProvider WHERE id = :providerId"; Query query = sessionFactory.getCurrentSession().createQuery(hql); query.setParameter("providerId",providerId); int result = query.executeUpdate();
could someone pls help resolving it?
Upvotes: 8
Views: 2161
Reputation: 2445
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails
this exception tells that you should delete your ServiceCenterDetails associated with ServiceProviders first and then delete the ServiceProviders.
Upvotes: 0
Reputation: 41
There are two tings,
Why you are using @OnDelete
when you using CascadeType.ALL
in @oneToMany
? CascadeType.ALL
will delete child entities when parent is deleted.
@OnDelete
mainly used in child entities with @ManyToOne
not otherwise.
Try with any option and check.
Upvotes: 3
Reputation: 23552
The error message is quite clear: There are foreign key references to the ServiceProvider
s you are trying to delete. Delete ServiceCenterDetails
first:
delete from ServiceCenterDetails where serviceProvider.id = :providerId
Upvotes: 0