在 JPA 中正确删除对 Post 的评论
Properly deleting comments on a Post in JPA
我有一个带有 JPA/JAX-RS 后端的前端应用程序,我想在其中请求删除对 post 的评论。
我正在使用存储库模式,其中我使用以下方法删除评论:
@Override
public Comment delete(Comment comment)
{
return getEntityManager().createQuery("DELETE Comment c WHERE c.id = :id ", Comment.class)
.setParameter("id", comment.getId())
.getSingleResult();
}
这里我得到错误:
Update/delete queries cannot be typed JPA
在这里我有点不知道该怎么做,我可以只更改 Comment.class 并使其成为一个通用查询,但在我的外观中调用方法
我也想做条件检查是否有评论
Comment commentToDelete = commentRepository.get(comment);
if(commentToDelete == null){
throw new ResourceNotFoundException(Comment.class, comment);
}
我怎样才能以最简单的方式解决这个问题,我可以 return 一个对象然后直接转换它,还是有另一种方法来检查评论并将其从数据库中删除?
您在查询中错过了 FROM
。
通过指定 FROM
将查询更改为此 DELETE FROM Comment c WHERE c.id = :id
参考
您可以省略条件检查,因为根据 getSingleResult() 文档,如果没有结果,它将抛出 NoResultException
,您可以捕获该异常并重新抛出您的异常。
所以解决方案看起来像这样:
try {
Comment deletedComment = commentRepository.delete(comment);
} catch (NoResultException nre) {
throw new ResourceNotFoundException(Comment.class, comment)
}
同时确保将 FROM
添加到您的 JPQL 查询中,正如 Alien 所说。
编辑:
我认为你应该调用 query.executeUpdate()
而不是调用 getSingleResult()
;
When you create a DELETE OR UPDATE query, you should always use executeUpdate method
getEntityManager().createQuery("DELETE FROM Comment c WHERE c.id = :id ", Comment.class)
.setParameter("id", comment.getId())
.executeUpdate();
The return type of this method is an integer telling you how many rows within your table have been affected
我有一个带有 JPA/JAX-RS 后端的前端应用程序,我想在其中请求删除对 post 的评论。
我正在使用存储库模式,其中我使用以下方法删除评论:
@Override
public Comment delete(Comment comment)
{
return getEntityManager().createQuery("DELETE Comment c WHERE c.id = :id ", Comment.class)
.setParameter("id", comment.getId())
.getSingleResult();
}
这里我得到错误:
Update/delete queries cannot be typed JPA
在这里我有点不知道该怎么做,我可以只更改 Comment.class 并使其成为一个通用查询,但在我的外观中调用方法
我也想做条件检查是否有评论
Comment commentToDelete = commentRepository.get(comment);
if(commentToDelete == null){
throw new ResourceNotFoundException(Comment.class, comment);
}
我怎样才能以最简单的方式解决这个问题,我可以 return 一个对象然后直接转换它,还是有另一种方法来检查评论并将其从数据库中删除?
您在查询中错过了 FROM
。
通过指定 FROM
DELETE FROM Comment c WHERE c.id = :id
参考
您可以省略条件检查,因为根据 getSingleResult() 文档,如果没有结果,它将抛出 NoResultException
,您可以捕获该异常并重新抛出您的异常。
所以解决方案看起来像这样:
try {
Comment deletedComment = commentRepository.delete(comment);
} catch (NoResultException nre) {
throw new ResourceNotFoundException(Comment.class, comment)
}
同时确保将 FROM
添加到您的 JPQL 查询中,正如 Alien 所说。
编辑:
我认为你应该调用 query.executeUpdate()
而不是调用 getSingleResult()
;
When you create a DELETE OR UPDATE query, you should always use executeUpdate method
getEntityManager().createQuery("DELETE FROM Comment c WHERE c.id = :id ", Comment.class)
.setParameter("id", comment.getId())
.executeUpdate();
The return type of this method is an integer telling you how many rows within your table have been affected