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);
}
我在学习 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);
}