【问题标题】:Query to delete all rows in a table hibernate查询删除表休眠中的所有行
【发布时间】:2014-09-25 16:04:31
【问题描述】:

我正在尝试使用休眠查询删除表“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 
}

【问题讨论】:

    标签: hibernate hql delete-row


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 您更改了表的大小写,这在某些数据库引擎中不起作用。这说明重复表名并不是一个好主意(难维护项)。
    【解决方案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 次命中的使用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2015-10-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    相关资源
    最近更新 更多