Java 无法在spring hibernate中删除实体
我使用的是hibernate版本4.3.11.Final。 当我尝试从jsp页面删除产品时,它会进入控制器并完全执行它。 但是,它会在控制台上显示此消息:org.hibernate.event.internal.DefaultDeleteEventListener DeleteTransienty 信息:HH000114:在删除处理中处理临时实体 有人有解决办法吗 这是我的控制器: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
@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