在Hibernate中删除表中所有行的查询

8
我正在尝试使用Hibernate查询删除表'user_role'中的所有行。但每次都会出现错误。有人可以帮我吗?
DaoImpl
@Override
public void deleteAll() {
    session.getCurrentSession().delete(/*delete all query*/);
}

模型类

@Entity @Table(name="user_role")
public class User_Role {

    @Id @Column @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;

    @Column(name="role_name")
    private String name;

    //setter and getter 
}
2个回答

12

试试这个:

sessionFactory.getCurrentSession().createQuery("delete from User_Role").executeUpdate();

你改变了表的大小写,这在某些数据库引擎中是行不通的。这表明重复表名不是一个好主意(难以维护)。 - Stealth Rabbi

2
您可以使用此方法逐个删除所有类的实例。如果您有许多记录,则速度较慢,但是您不会复制表名的文本字符串。
public static void removeAllInstances(final Class<?> clazz) {
    SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
    Session session = sessionFactory.getCurrentSession();       
    session.beginTransaction();
    final List<?> instances = session.createCriteria(clazz).list();
    for (Object obj : instances) {
        session.delete(obj);
    }
    session.getTransaction().commit();
}

用法:

removeAllInstances(User_Role.class);

使用通用的1次命中。 - Onic Team

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接