java - entityManager.remove(class) 不起作用
问题描述
我在一个名为 Utilidades 的公共类下得到了这个方法:
public void delete(TipoUsuario tipoUsuario) throws Exception {
if (em != null && tipoUsuario != null) {
try {
System.out.println("NO SON NULOS");
// TipoUsuario p = em.find(TipoUsuario.class, tipoUsuario);
em.getTransaction().begin();
// Query query = em.createQuery("DELETE FROM TipoUsuario t WHERE t.idTipoUsuario = :idTipoUsuario");
// query.setParameter("idTipoUsuario", tipoUsuario.getIdTipoUsuario());
// int rows = query.executeUpdate();
// if (em.contains(tipoUsuario)) {
// em.remove(tipoUsuario);
// } else {
em.remove(em.merge(tipoUsuario));
em.getTransaction().commit();
// }
} catch (EntityNotFoundException enfe) {
Logger.getLogger(Utilidades.class.getName()).log(Level.SEVERE, enfe.getMessage(), enfe);
em.getTransaction().rollback();
}
} else {
System.out.println("NULOS");
}
}
我将这个类注入一个 servlet 并使用这个删除方法,但没有删除该行
String st = request.getParameter("txtIdUsuario").trim();
if (!(st == null || "".equals(st))) {
idUsuario = Integer.parseInt(st);
}
tipoUsuario.setIdTipoUsuario(idUsuario);
out.println("<h2>Se selecionó botón " + idUsuario + " eliminar</h2> ");
utilidades.delete(tipoUsuario);
out.println("<h2>Se selecionó botón eliminar</h2> ");
你们知道我该怎么做才能删除一行吗?
解决方案
通常,我们从 db 中获取以确保实体存在。喜欢
FROM TipoUsuario WHERE NAME = :name;
Query query = em.createNativeQuery("FROM TipoUsuario WHERE NAME = :name;", TipoUsuario.class) .setParameter("name", name); TipoUsuario tipoUsuario = null; try { tipoUsuario = (TipoUsuario) query.getSingleResult(); } catch ( Exception e ) { return null; }
确保 NAME 是表 TipoUsuario 的主键。如果你有 TipoUsuario 的 id,你可以通过
em.find(TipoUsuario.class, id)
;获取实体。
- 无论如何,你会得到你想要的结果。然后你做
em.remote(tipoUsuario);
远程它。而已。
您的问题是您只设置了 TipoUsuario 对象的一个值,但它与表中的结果不同。
所以em.merge(obj)
只需在表中插入一个新行。然后删除新行。所以旧行仍然存在于表中。
推荐阅读
- excel - &“\”时的文件路径 - 运行时错误 76 找不到路径
- amazon-web-services - 向托管在 ec2 实例上的 Flask API 发送公共获取请求
- c - 如果我重新分配到更小的尺寸会发生什么?
- php - PHP代码将循环调用的图像转换为可点击的链接
- html - 更改 DT Shiny R 中过滤器标签的颜色
- python - 使用 Pandas 在 Python 中减去时间戳值
- docker-compose - 对 docker-compose 端口的 curl 请求在 travis-ci 中挂起
- python - 在 Python 中,如何在等待可能出现的图像时等待特定时间?
- ios - 自定义 UIButton 背景颜色不起作用
- php - 如何将数组发送到 register.blade.php