Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 带有@SqlDelete的JPA软删除导致SQL错误:参数索引超出范围(2>;参数数,即1)_Mysql_Spring Boot_Hibernate_Jpa - Fatal编程技术网

Mysql 带有@SqlDelete的JPA软删除导致SQL错误:参数索引超出范围(2>;参数数,即1)

Mysql 带有@SqlDelete的JPA软删除导致SQL错误:参数索引超出范围(2>;参数数,即1),mysql,spring-boot,hibernate,jpa,Mysql,Spring Boot,Hibernate,Jpa,我有Basket和BasketItem实体,它们都扩展了BaseEntity,如下所示: @MappedSuperclass 公共类基实体{ @Id@GeneratedValue(策略=GenerationType.IDENTITY) 私人长id; @列(name=“deleted”,nullable=false) private Boolean deleted=false; @Version@Column(nullable=false) 私人长版; } @实体 @其中(子句=“已删除=错误”)

我有
Basket
BasketItem
实体,它们都扩展了
BaseEntity
,如下所示:

@MappedSuperclass
公共类基实体{
@Id@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@列(name=“deleted”,nullable=false)
private Boolean deleted=false;
@Version@Column(nullable=false)
私人长版;
}
@实体
@其中(子句=“已删除=错误”)
@SQLDelete(sql=“UPDATE basket SET deleted=true,其中id=?”)
公共类扩展BaseEntity{
@OneToMany(mappedBy=“basket”,cascade=CascadeType.ALL,orphan=true,fetch=FetchType.LAZY)
私有列表项=新的ArrayList();
}
@实体
@其中(子句=“已删除=错误”)
@SQLDelete(sql=“UPDATE basketItem SET deleted=true,其中id=?”)
公共类BasketItem扩展BaseEntity{
@多通(可选=假)
@JoinColumn(name=“basket\u id”,nullable=false)
私人篮子;
}
现在,当我想从
篮子中删除
BasketItem
时,我只需调用
remove(BasketItem)
on Basket items列表并保存
Basket
实例:

@服务
公共类DeleteBasketItemUseCase{
@交易的
公共BasketOutput执行(最终长项目ID,最终长basketId){
//忽略装载和检查
basket.getItems().remove(basketItem);
basket=basketRepository.save(basket);
}
}
删除
basketItem
会生成
MySQL
错误:

java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1)
日志中生成的SQL为:

UPDATE
        basketItem 
    SET
        deleted=true 
    WHERE
        id = ?
我正在使用

  • Spring Boot 2.2.6.释放
  • MySQL 8.0
  • Hibernate 5.4.12.最终版
  • mysql-connector-java-8.0.19

我更新
@SQLDelete
并在注释末尾添加
和version=?

@SQLDelete(sql = "UPDATE basket SET deleted=true WHERE id=? and version=?")
@SQLDelete(sql = "UPDATE basket_item SET deleted=true WHERE id=? and version=?")
注意:我还更改了数据库表的名称