我在名为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中,并使用此delete方法,但未删除行
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> ");
你们是否知道如何删除行?
答案 0 :(得分:0)
通常,我们从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)
仅在表中插入新行。然后删除新行。因此,表中仍然存在旧行。