从onetomany删除Hibernate

时间:2016-01-16 19:56:09

标签: java hibernate

我有两个表与OneToMany关系

  

class ServiceProvider {

     

...

     

@OneToMany(取= FetchType.EAGER,的mappedBy ="的ServiceProvider&#34 ;,             cascade = {CascadeType.ALL,CascadeType.REMOVE},orphanRemoval = true)     @OnDelete(action = OnDeleteAction.CASCADE)私有   列出serviceCenters; ...

     

}

     

类ServiceCenterDetails {

     

... //双向多对一关联   ServiceProviderDomainMap @ManyToOne     @JoinColumn(name =" SERVICE_PROVIDER_ID")private ServiceProvider   的ServiceProvider;

     

...

     

}

我正在尝试删除提供的行。但我得到以下错误:

引起:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败(service_center_detailsFK_qvahoxeovx9vmwl6mcu2c0lyw,CONSTRAINT SERVICE_PROVIDER_ID外键(service_provider)参考ID String hql = "DELETE FROM ServiceProvider WHERE id = :providerId"; Query query = sessionFactory.getCurrentSession().createQuery(hql); query.setParameter("providerId",providerId); int result = query.executeUpdate(); ))

以下是我正在尝试的方式

{{1}}

有人可以帮忙解决它吗?

3 个答案:

答案 0 :(得分:0)

错误消息非常明确:您尝试删除MyClass的外键引用。首先删除ServiceProvider

ServiceCenterDetails

答案 1 :(得分:0)

有两种情况,

  1. @OnDelete中使用CascadeType.ALL时,为何使用@oneToMany?删除父项时,CascadeType.ALL将删除子实体。

  2. @OnDelete主要用于@ManyToOne的子实体。

  3. 尝试使用任何选项并检查。

答案 2 :(得分:0)

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails

此异常表明您应该首先删除与ServiceProviders关联的ServiceCenterDetails,然后再删除ServiceProviders。