【问题标题】:while try to delete from database HTTP Status 500 - Request processing failed尝试从数据库中删除 HTTP 状态 500 - 请求处理失败
【发布时间】:2017-06-28 00:27:27
【问题描述】:

AdminController.java

    @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>

当我尝试删除时出现错误:

HTTP 状态 500 - 请求处理失败;嵌套异常是 org.hibernate.MappingException:未知实体:java.lang.Integer"

和 我也尝试将 admincontroller 设置为“/delete?id=${batchid}”。 当我这样做时,我遇到了无法转换为字符串的问题

【问题讨论】:

    标签: java hibernate spring-mvc


    【解决方案1】:

    Session.delete(Object); 将您要删除的实体作为参数,即您的示例中的 Batch 对象。

    getCurrentSession().delete(batchid); 中,您传递了一个整数 - Hibernate 尝试从数据库中删除实体 Integer,但找不到映射,因此引发 MappingException。

    你在AdminDaoImpl.java注释掉的代码其实就是你获取实体所需要的!

    Hibernate Session.delete() an object if exists 有关于如何在 Hibernate 中删除实体的示例。还有一些关于是否应该使用Session.get(Batch.class, batchid)而不是Session.load()的提示。

    【讨论】:

    • 根据你的建议我把 Batch batch = (Batch) session.get(Batch.class,batchid);我遇到了问题 404 错误
    • 您最初的问题出在 ORM 层(休眠)中 - HTTP 错误在这里没有多大帮助,因为它们在上面很多层。您的 HTTP 500 错误包含实际有帮助的原始 java / Hibernate 异常。 HTTP 404 是“找不到页面”,肯定是另一个问题...
    • 我知道 404 是一个找不到页面的错误,但是当我更改为该页面时,我遇到了这个问题,但是当我删除它时,它就像往常一样正常工作。
    • 我很确定 404 与 Hibernate 没有任何关系;我假设您的代码中有多个问题。也许您应该尝试让不同的层彼此独立工作。如果您删除 adminDao.deletebatch(batchid);-call,AdminController 是否工作(请参阅我的最后一条评论,这可能是 404 的原因)。 AdminDaoImpldeletebatch(int batchid) 在直接从某些测试代码(不在您的 Web 应用程序中)调用时是否有效?
    • 是的,我得到了这个问题的解决方案,这是由于 sessionFactory.getcurrentseesion().delete(new Batch(batchid)) 和删除功能将采取对象。
    猜你喜欢
    • 2015-08-28
    • 1970-01-01
    • 2015-12-04
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多