EnitityManager 删除 - IllegalArgumentException:未知实体:java.lang.Integer] 具有根本原因

EnitityManager remove - IllegalArgumentException: Unknown entity: java.lang.Integer] with root cause

我在学习 spring 时做了这个例子,一切正常,现在我正在编写自己的项目,但我不明白为什么我会收到错误:未知实体:java.lang.Integer我尝试从 EntityManager class 执行删除操作以从 MySQL 数据库

中删除一个对象

产品class(我不会在这里粘贴所有方法,如 getter 和 setter 等)

import javax.persistence.*;

@Entity
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String name;

    @OneToOne
    private ProductType type;

    private float price;

    private String description;

    //more code...
}

ProductRepository(我只显示删除方法)

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.Transactional;

public class DBProductRepository implements ProductRepository{
    @PersistenceContext
    private EntityManager entityManager;

    @Override
    @Transactional
    public void deleteProduct(Integer id) {
        entityManager.remove(id);
    }

    //more code...
}

ProductService(我只显示删除方法)

@Service
public class ProductService {
    public void deleteProduct(Integer id) {
        productRepository.deleteProduct(id);
    }
    //more code...
}

产品控制器

@Controller
public class ProductController {
    @RequestMapping("/products")
    public String getProducts(Model model){
        List<Product> products = productService.getAllProducts();
        model.addAttribute("products",products);
        return "products";
    }

    @RequestMapping(value="/product/delete/{id}")
    public String deleteProduct(@PathVariable("id") Integer id){
        productService.deleteProduct(id);
        return "redirect:/products";
    }
    //more code...
}

products.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Product list</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>

    <link rel="stylesheet" th:href="@{/webjars/bootstrap/4.3.1/css/bootstrap.min.css}"/>

    <script th:src="@{/webjars/jquery/3.4.1/jquery.min.js}"></script>
    <script th:src="@{/webjars/bootstrap/4.3.1/js/bootstrap.min.js}"></script>

</head>
<body>
<div class="container">
    <table class="table">
        <thead>
        <tr>
            <td>Id</td>
            <td>Type</td>
            <td>Name</td>
            <td>Price</td>
            <td>Description</td>

        </tr>
        </thead>
        <tbody>
        <tr th:each=" product : ${products}">
            <td th:text="${product.id}"></td>
            <td th:text="${product.type}"></td>
            <td th:text="${product.name}"></td>
            <td th:text="${product.price}"></td>
            <td th:text="${product.description}"></td>
            <td><a th:href="${'/product/delete/'+product.id}">Delete</a></td>
        </tr>
        </tbody>
    </table>
</div>
</body>
</html>

当我在站点 localhost:8080/products 上单击删除时,我得到: “白标错误页面

此应用程序没有 /error 的显式映射,因此您将其视为后备。 2019 年 9 月 16 日星期一 17:41:45 出现意外错误(类型=内部服务器错误,状态=500)。 未知实体:java.lang.Integer"

在控制台中: “2019-09-16 17:41:45.175 错误 7792 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet]:Servlet.service () for servlet [dispatcherServlet] in context with path [] throw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException: Unknown entity: java.lang.Integer] with root cause

我做错了什么?

EntityManager#remove 接受一个 实体实例 作为参数。您正在通过 Integer.

更改为:

@Override
@Transactional
public void deleteProduct(Product product) {
    entityManager.remove(product);
}