休眠获取方式ID:java.lang.NoSuchMethodException实体错误

wlwcrazw  于 2023-01-19  发布在  Java
关注(0)|答案(2)|浏览(160)

Hibernate并尝试构建一个简单的功能,我们可以通过ID搜索产品。Hibernate有一个inbuit功能,可以通过ID搜索实体。我尝试了同样的方法,但我得到了“java.lang.NoSuchMethodException”。

MyController.java :

 @GetMapping(value = "/getProducts/{id}" , produces ="application/json")
    public ResponseEntity<Product> display(@PathVariable int id) {
        Product products = productServiceImp.getAllProducts(id);
        return ResponseEntity.ok(products);

MyProductServiceImp:

@Override
    public Product getAllProducts(int product_id ) {
        return productRepository.getById(product_id );
    }

MyProductRepository:
@Repository
public interface ProductRepository extends JpaRepository<Product, Integer> {
}

Schema of Product table : (product_id, desciption,display_name, qty, amount)

当我尝试通过 Postman curl --location --request GET 'http://localhost:8080/admin/getProducts/1调用API时,我发现它是由以下原因引起的:java.lang.NoSuchMethodException: com.Project.OrderProcessing.OrderProcessing.Entity.Product$HibernateProxy$zAdAYVvM.<init>().I am unable to understand reason behind it

3wabscal

3wabscal1#

尝试findById,因为getById已弃用。未经测试,但类似于:

我的产品服务导入:

@Override
public Optional<Product> findById(Integer productId) {
    return productRepository.findById(productId);
}

产品.java

@Entity //make sure this is present
@Getter //from Lombok
@Setter //from Lombok
public class Product {

@Id //need this
@GeneratedValue //need this to auto-generate
private Integer id;

private String description;

//the rest: displayName, quantity, amount...

}

您的@Repository接口看起来很好。根据您需要做什么,您的控制器有不同的变体。但现在,只需尝试调用您的服务方法,这样您就知道您从数据库获得了结果并从那里开始工作。
为了保持一致性,通常使用驼峰大小写,然后你可以在仓库的接口中使用Spring约定,这样你的方法看起来就像findAllByDisplayName()而不是findAllByDisplay_Name(),Spring会为你处理查询。
还要注意的是,您可能不会使用一个产品ID来获取所有产品,对吗?因此,它应该仅称为getProductfindProductgetProductByIdfindProductById

sqxo8psd

sqxo8psd2#

MyControllerClass:
@RequestMapping("/admin")
@RestController
public class ProductController {
 @GetMapping(value = "/getProducts/{id}" , produces ="application/json")
    public Optional<Product> display(@PathVariable int id) {
        Optional<Product> products = productServiceImp.getProductDetailsbyID(id);
        return products;
}
}
MyProductServiceImp :
@Override
    public Optional<Product> getProductDetailsbyID(int product_id ) {
        Optional<Product> prodresult=productRepository.findById(product_id);
        return prodresult;
    }

我已经用FindbyID代替了GetById,它起作用了!!

相关问题