通过用户名 DAO/hibernate 删除记录

Posted

技术标签:

【中文标题】通过用户名 DAO/hibernate 删除记录【英文标题】:Delete records by username DAO/hibernate 【发布时间】:2012-12-07 09:02:55 【问题描述】:

如何删除与一个用户关联的所有记录,例如,我想删除我的数据库中所有者当前登录用户的 5 条记录。 这是我的代码:

public void deleteOrders() 

    Authentication auth = SecurityContextHolder.getContext()
            .getAuthentication();
    String user = auth.getName(); // get logged in username
    getHibernateTemplate().delete(
            "FROM " + Orders.class.getName() + " WHERE username='" + user
                    + "'");

我正在尝试这样的事情,但它失败了,我无法继续前进。怎么做才对?

【问题讨论】:

如果失败,试着让它工作。我们可以用这么少的细节说的唯一一件事是您应该使用参数化查询而不是串联。至少向我们展示实体的代码和异常的完整堆栈跟踪。 【参考方案1】:

HibernateTemplate.delete() 将要删除的实体实例作为参数。它不需要 HQL 查询。

使用bulkUpdate() 执行删除查询。或者更好的是,忘记已弃用的 HibernateTemplate,直接使用 Hibernate API。

【讨论】:

【参考方案2】:

这可能行不通,因为class.getName() 包含包路径,但如果您的类名与表名相同,getSimpleName() 可能会起作用:

"FROM " + Orders.class.getSimpleName() + " WHERE ..."

但是,我倾向于做这样的事情:

entityManager.createNativeQuery("delete from orders where ...").execute();

【讨论】:

您可以将实体的完全限定名称放入 HQL 查询 AFAIK。

以上是关于通过用户名 DAO/hibernate 删除记录的主要内容,如果未能解决你的问题,请参考以下文章

我要删除电脑中的视频记录,在哪可以删?

微信误删聊天记录,解密了EnMicroMsg.db,用sqlcipher打开之后,看到是删除后的记录,现怎么恢复误删记录

linux系统监控:记录用户操作轨迹,谁动过服务器

linux系统监控:记录用户操作轨迹,谁动过服务器

win10系统快速访问记录删不掉怎么办

oracle 如何恢复误删的表记录数据