Java 尝试从数据库中删除HTTP状态500时-请求处理失败
AdminController.javaJava 尝试从数据库中删除HTTP状态500时-请求处理失败,java,hibernate,spring-mvc,Java,Hibernate,Spring Mvc,AdminController.java @Controller public class AdminController { @Autowired HttpServletRequest request; @Autowired AdminDao adminDao; @RequestMapping("/deletebatch") public String deletebatch(){
@Controller
public class AdminController {
@Autowired
HttpServletRequest request;
@Autowired
AdminDao adminDao;
@RequestMapping("/deletebatch")
public String deletebatch(){
int batchid = Integer.parseInt(request.getParameter("id"));
adminDao.deletebatch(batchid);
return "redirect:/viewbatch";
}
#AdminDaoImpl.java
@Repository("adminDao")
public class AdminDaoImpl implements AdminDao {
@Autowired
SessionFactory sessionFactory;
@Transactional
public void deletebatch(int batchid){
// Batch batch = (Batch) sessionFactory.getCurrentSession().load(Batch.class,batchid);
// if(batch!=null){
sessionFactory.getCurrentSession().delete(batchid);
//}
}
}
#viewbatch.jsp
<form >
<table border="1">
<tr>
<th>BATCH id</th>
<th>BATCH name</th>
<th>edit/delete</th>
</tr>
<c:forEach items="${batchlist}" var="batchlist">
<tr>
<td>${batchlist.batchid}</td>
<td>${batchlist.batchname}</td>
<td><a href="edit">edit</a>/<a href="${pageContext.servletContext.contextPath}/deletebatch?id=${batchlist.batchid}">delete</a></td>
</tr>
</c:forEach>
批次id
批次名称
编辑/删除
${batchlist.batchid}
${batchlist.batchname}
/
当我尝试删除时,出现错误:
HTTP状态500-请求处理失败;嵌套异常是
org.hibernate.MappingException:未知实体:java.lang.Integer“
及
我还尝试将admincontroller设置为“/delete?id=${batchid}
”。
执行此操作时,我遇到了一个问题,例如无法转换为字符串。删除(对象);将要删除的实体作为参数,即示例中的批处理对象
在getCurrentSession().delete(batchid);
中,您正在传递一个整数-Hibernate尝试从数据库中删除实体Integer
,但找不到映射,因此引发MappingException
您在AdminDaoImpl.java
中注释掉的代码实际上就是您获得实体所需要的
有一些关于如何在Hibernate中删除实体的示例。还有一些关于是否应该使用Session.get(Batch.class,batchid)
而不是Session.load()
Session.delete(Object);
将要删除的实体作为参数,即示例中的Batch
对象
在getCurrentSession().delete(batchid);
中,您正在传递一个整数-Hibernate尝试从数据库中删除实体Integer
,但找不到映射,因此引发MappingException
您在AdminDaoImpl.java
中注释掉的代码实际上就是您获得实体所需要的
有关于如何在Hibernate中删除实体的示例。还有一些提示,说明您是否应该使用
Session.get(Batch.class,batchid)
而不是Session.load()
根据您的建议,我将Batch Batch=(Batch)Session.get(Batch.class,batchid);我发现了问题404错误您最初的问题是在ORM层(Hibernate)-HTTP错误在这里没有多大帮助,因为它们在上面有很多层。您的HTTP 500错误包含实际有帮助的原始java/Hibernate异常。HTTP 404是一个“未找到的页面”“当然还有另一个问题……我知道404是一个页面未找到的错误,但当我改为该错误时,我发现了这个问题,但当我删除它时,它会像往常一样正常工作。我很确定404与Hibernate没有任何关系;我假设您的代码中存在多个问题。也许你应该试着让不同的层独立工作。如果删除adminDao.deletebatch(batchid),AdminController是否工作代码>-call(请参阅我最后的评论,这可能是404的原因)。当直接从某些测试代码(不在web应用程序中)调用时,AdminDaoImpldeletebatch(int batchid)
是否有效?是的,我找到了这个问题的解决方案,这是由于sessionFactory.GetCurrentSeision().delete(新批(batchid))根据你的建议,我将Batch=(Batch)session.get(Batch.class,batchid);我遇到了问题404 error您最初的问题是在ORM层(Hibernate)-HTTP错误在这里没有多大帮助,因为它们在上面有很多层。HTTP 500错误包含实际有用的原始java/Hibernate异常。HTTP 404是一个“找不到页面”的问题,而且肯定是另一个问题……我知道404是一个找不到页面的错误,但当我改为该错误时,我发现了这个问题,但当我删除它时,它会像往常一样正常工作。我很确定404与Hibernate没有任何关系;我假设您的代码中存在多个问题。也许你应该试着让不同的层独立工作。如果删除adminDao.deletebatch(batchid),AdminController是否工作代码>-call(请参阅我最后的评论,这可能是404的原因)。当直接从某些测试代码(不在web应用程序中)调用时,AdminDaoImpldeletebatch(int batchid)
是否有效?是的,我得到了这个问题的解决方案,这是由于sessionFactory.GetCurrentSeision().delete(新批处理(batchid))和delete Function将接受该对象。