gpt4 book ai didi

spring-boot - 在 JPQL 查询中执行更新/删除查询

转载 作者:行者123 更新时间:2023-12-04 11:43:03 26 4
gpt4 key购买 nike

我在 JPQL 中有这样的插入查询:

@Modifying
@Query(value = "insert into Product_Category (product_id, category_id , description , numberOfProduct, image, price ) values (:product_id, :category_id, :description, :numberOfProduct, :image, :price)", nativeQuery = true)
void insertProduct(@Param("product_id") int product_id, @Param("category_id") int category_id,
@Param("description") String description, @Param("numberOfProduct") int numberOfProduct,
@Param("image") String image, @Param("price") int price);

我不明白为什么这不起作用。我有这个错误:
javax.persistence.TransactionRequiredException: Executing an update/delete query

最佳答案

你需要用 @Transactional 包裹你的语句.要符合 JPA,您应该使用 javax.transaction.Transactional ,尽管在某些版本的 spring-data 组合中,如果 javax.transaction.Transactional导致问题您可以尝试使用 org.springframework.transaction.annotation.Transactional .

请记住,在 JPA 中,一切都与实体状态转换有关。当您修改实体时,hiberante 会更新持久性上下文并定期刷新它。
发生这种情况的顺序是:

  • OrphanRemovalAction
  • AbstractEntityInsertAction
  • 实体更新操作
  • QueuedOperationCollectionAction
  • CollectionRemoveAction
  • 集合更新操作
  • CollectionRecreateAction
  • EntityDeleteAction

  • 所以自然插入和更新在删除之前。
    当您有执行以下操作的代码时:删除 + 插入实际上将在删除之前执行插入。在这种情况下,正确的方法是获取和更新。

    关于spring-boot - 在 JPQL 查询中执行更新/删除查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54822729/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com