如何解决部分更新时的 Micronaut 数据“@Version 不能为空”
尝试在带有 @Version 注释列的实体的存储库中调用部分更新时,我收到 IllegalStateException,其中包含消息“@Version 不能为空”以及 2.4.4 版本的 micronaut 数据。
实体:
package domain.model.entity.products;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Version;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
@Entity
@Setter
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "product",schema = "products")
public class Product implements Serializable {
@Id
@Column
private String idClient;
@Column
private Integer rating;
@Column
private BigDecimal limitActual;
@Column
private LocalDate dateValidation;
@Column
private Boolean active;
@Version
private Long version;
}
存储库:
package domain.repository.products;
import domain.model.entity.products.Product;
import io.micronaut.data.annotation.Id;
import io.micronaut.data.annotation.Repository;
import io.micronaut.data.annotation.Version;
import io.micronaut.data.jpa.repository.JpaRepository;
import java.math.BigDecimal;
@Repository
public interface ProductRepository extends JpaRepository<Product,String> {
void update(@Id String idClient,BigDecimal limitActual,@Version Long version);
}
当我调试源代码以发现发生了什么时,在类 io.micronaut.data.hibernate.operations.HibernateJpaOperations#bindParameters 中,propertyPath 变量为空,因此该方法无法设置“previousValue”的值,导致错误。
验证propertyPath为null的原因,发现preparedQuery.getIndexedParameterPaths()
总是返回null,初始化的查询是:
UPDATE domain.model.entity.limit.Product product_ SET product_.limitActual=:p1,product_.version=:p2 WHERE (product_.idClient = :p3 AND product_.version = :p4)
但是好像找不到参数p2。
我做错了什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。