Java 无法在spring hibernate中删除实体

Java 无法在spring hibernate中删除实体,java,spring,hibernate,maven,Java,Spring,Hibernate,Maven,我使用的是hibernate版本4.3.11.Final。 当我尝试从jsp页面删除产品时,它会进入控制器并完全执行它。 但是,它会在控制台上显示此消息:org.hibernate.event.internal.DefaultDeleteEventListener DeleteTransienty 信息:HH000114:在删除处理中处理临时实体 有人有解决办法吗 这是我的控制器: @RequestMapping("/deleteProduct") public ModelAndView

我使用的是hibernate版本4.3.11.Final。 当我尝试从jsp页面删除产品时,它会进入控制器并完全执行它。 但是,它会在控制台上显示此消息:org.hibernate.event.internal.DefaultDeleteEventListener DeleteTransienty 信息:HH000114:在删除处理中处理临时实体

有人有解决办法吗

这是我的控制器:

@RequestMapping("/deleteProduct")
    public ModelAndView delete(@ModelAttribute("product") Product product, BindingResult result)
    {
        System.out.println("In delete");
        productDAO.delete(product);
        System.out.println("Product Successfully deleted");
        return new ModelAndView("AdminProduct");
    }
这是我的JSP:

<c:forEach items="${products}" var="product">
                <tr
                    style="background-color: white; color: black; text-align: center;"
                    height="30px">
                    <td><c:out value="${product.p_id}" /></td>
                    <td><c:out value="${product.p_name}" /></td>
                    <td><c:out value="${product.p_desc}" /></td>
                    <td><c:out value="${product.price}" /></td>
                    <td><form:form action="deleteProduct" modelAttribute="product">
                            <input type="submit" value="Delete" />
                        </form:form></td>
                    <td><form:form action="editProduct" modelAttribute="product">
                            <input type="submit" value="Edit" />
                        </form:form></td>
                </tr>
            </c:forEach>

在控制器中,您得到一个产品对象Product,而该产品不在Hibernate的控制之下。因此,如果要删除带有产品实体的记录,则应在删除前从数据库中选择该记录。如下图所示

Product p = productDAO.get(product.getId());
productDAO.delete(p);

删除记录的更好方法是在ProductDAO中添加一个方法,如
deleteById(String id)
,并使用参数
product.getId()
调用它

尝试在会话中使用事务。可能您的更改未提交给会话

Transaction transaction = sessionFactory.getCurrentSession().beginTransaction();
// your changes
transaction.commit();  // or you can rollback on exceptions
或者尝试将您的
@Transactional
注释更改为
@org.springframework.transaction.annotation.Transactional

为什么在实体类上需要
@Component

不管怎样,我认为这是事务和事务管理器的问题

您是否在控制面板中填写了
产品
对象id?它应该具有由Hibernate处理的id您的产品实体是临时的或包含临时实体作为字段。Transient表示数据库中没有持久化,您会发现它带有@Transient annotation注释。发布您的实体代码添加实体代码。请检查。尝试在DAOImpl中打印product.getP_id(),这台打印机有任何值吗?谢谢。我试过你的方法。问题依然存在。
Product p = productDAO.get(product.getId());
productDAO.delete(p);
Transaction transaction = sessionFactory.getCurrentSession().beginTransaction();
// your changes
transaction.commit();  // or you can rollback on exceptions