当前位置: 首页 > 知识库问答 >
问题:

为什么手动定义的Spring Data JPA delete查询不触发级联?

亢嘉茂
2023-03-14

我有以下问题:当我试图删除一个具有以下关系的实体时:

@OneToMany(mappedBy="pricingScheme", cascade=CascadeType.ALL, orphanRemoval=true)
private Collection<ChargeableElement> chargeableElements;

对于CrudRepository,它通过提供的delete方法删除实体及其所有可收费元素,这很好。当我尝试使用自定义删除时,会出现问题:

@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(…),然后用标准的delete方法删除持久实体,但这是不优雅的。是否可以像我尝试的那样使用自定义的@query方法?

共有1个答案

酆君墨
2023-03-14

删除操作仅适用于指定类及其子类的实体。它不级联到相关实体。

这里有一个与这个主题相关的问题和答案可以在这里找到。

 类似资料:
  • 问题内容: 我刚刚在Oracle中遇到了一个奇怪的行为,我希望它会提高ORA-00918,但事实并非如此。以该查询为例。 此查询从概念上讲是在查找具有禁用触发器的表的详细信息,但是请注意,这不是我要解决的问题。这个问题不是该查询,数据字典,视图或表所独有的。据我所知,它适用于任何一组表或视图(我尝试过的两个或三个)。 无论如何,尝试运行此查询,你会得到ORA-00918,因为两者并有一个名为列,从

  • 我需要测试一个服务类,但是当我试图模拟dao类时,它没有被触发,因此不能使用ThenReturn()。 我认为问题是因为我在服务类(Spring MVC 3.1)中为我的Dao和@Autowired使用了一个接口: 接口: 执行情况: 成功了!

  • 问题内容: 我的代码中有一个。我已添加。但是它还是没有被触发。我已经尝试了很多时间,但是没有找到解决方案。 但是控制台中没有任何内容。请建议我我在做什么错。 问题答案: FocusListener不是JComboBox的适当监听器,另外一个监听器可以创建无限循环(尤其是可编辑的JComboBox), 的FocusListener是异步的,有时是太难捕捉事件是正确的订单特别是在案件JComponen

  • 我正在使用hibernate envers来审核事件,当我调用repositoy.delete()或Repository.save()时,它可以很好地与Spring Data JPA存储库一起工作

  • 问题内容: 我创建了两个实体并且具有一对多关系。当我发出时,我希望hibernate状态使用“ INNER JOIN”查询。但是它只是发出查询以从Book_Category获取数据。 我缺少什么?我该怎么做使hibernate问题的JOIN查询? Book.java BookCategory.java BookCategoryRepository.java 问题答案: 默认情况下,Hibernat

  • 我创建了两个具有一对多关系的实体和。当我发布,我希望hibernate使用“内部联接”查询。但它只是发出了从Book_类别获取数据的查询。 我错过了什么?我应该怎么做才能使hibernate问题加入查询? 书JAVA 图书分类。JAVA epository.java