如果我的 id 是字符串,如何使用 deleteById jpa 存储库?

How to use deleteById jpa repository if my id is a String?

我需要使用其 ID 删除实体,尝试使用 JPA 存储库按 ID 删除方法

 productRepository.deleteById(id); 

其中“id”应该是 Long- 如果传递的字符串值会给出错误:Long expected

Sample id= "402880f17ebd7e44017ebd7fe9ee0000"

因此我无法将 String 转换为 Long

实体class

@Entity
@Table(name = "products")
public class Product {

@Id @GeneratedValue(generator = "system-uuid")
@GenericGenerator(name="system-uuid",strategy = "uuid")
@Column(name="product_id")
private String id;

@Column(name="price")
@NotNull
private float productPrice;

@Column(name="product_name")
@NotNull
private String productName;

@Column(name="description")
private String productDesc;

@Column(name="stock_available")
private int productStock;

@ManyToOne(optional = false)
@JoinColumn(name = "shop_id")
private Shop shop;

public Product(){
}

public Product(String id, float productPrice, String productName, String productDesc, int productStock, Shop shop) {
    this.id = id;
    this.productPrice = productPrice;
    this.productName = productName;
    this.productDesc = productDesc;
    this.productStock = productStock;
    this.shop = shop;
}
}

存储库Class:

@Repository
public interface ProductRepository extends JpaRepository<Product,Long>{
}

在您的 productRepository 中,将接口上的第二个通用类型从 long 更改为 string。所以更改你的代码片段

@Repository
public interface ProductRepository extends JpaRepository<Product,Long> {}

至:

@Repository
public interface ProductRepository extends JpaRepository<Product,String> {}

此外,对于 Spring 数据 JPA 接口,您不需要 @Repository

在您的 ProductRepository 中,当您扩展 JpaRepository<EntityName,EntityId Type>. 在您的情况下,您将字段 id 用作字符串,但将类型扩展为 Long。 要解决您的问题,请以 Long number 形式输入或将主键类型转换为 String。

主键类型错误,应该是'String',不是'Long':

@Repository
public interface ProductRepository extends JpaRepository<Product,String>{
}