【发布时间】:2014-06-20 00:37:47
【问题描述】:
我有以下问题:当我尝试删除具有以下关系的实体时:
@OneToMany(mappedBy="pricingScheme", cascade=CascadeType.ALL, orphanRemoval=true)
private Collection<ChargeableElement> chargeableElements;
通过提供的删除方法使用CrudRepository,它会删除实体及其所有可收费元素,这很好。当我尝试使用自定义删除时出现问题:
@Modifying
@Query("DELETE FROM PricingScheme p WHERE p.listkeyId = :listkeyId")
void deleteByListkeyId(@Param("listkeyId") Integer listkeyId);
上面写着:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:
Cannot delete or update a parent row: a foreign key constraint fails
(`listkey`.`chargeableelements`, CONSTRAINT `FK_pox231t1sfhadv3vy7ahsc1wt`
FOREIGN KEY (`pricingScheme_id`) REFERENCES `pricingschemes` (`id`))
为什么不允许我这样做? @Query 方法不支持级联属性吗?我知道我可以先findByListkeyId(…),然后使用标准删除方法删除持久实体,但这并不优雅。是否可以按照我尝试的方式使用自定义 @Query 方法?
【问题讨论】:
标签: jpa spring-data-jpa jpql cascade cascading-deletes