Hibernate - 如何在没有加载到内存的情况下删除条件?

时间:2011-07-06 16:14:29

标签: java hibernate

我有一个对象 -

 @Entity
 public class myObject{
      public string fieldA;
      public string fieldB
      ...
 }

我没有任何实例,但我想删除db中的所有行 fieldA == A

这是正确的方法吗?

    try {
        session.beginTransaction();
        session.createQuery("delete from MyObject where fieldA = " +        
                             "BlaBla").executeUpdate();

        session.getTransaction().commit();
        savedSuccessfully = true;
    } catch (HibernateException e) {
        session.getTransaction().rollback();
        savedSuccessfully = false;

    } finally {
        session.close();
    }
    return savedSuccessfully;

4 个答案:

答案 0 :(得分:2)

看看使用native sql in hibernatesession.createSQLQuery来确保hibernate不会涉及使用HSQL布线bean。

还要避免使用字符串连接来构建查询。最后,你的数据库最像是你的瓶颈,有这样一个简单的查询,所以请确保你有适当的索引。

答案 1 :(得分:0)

是的,要在不先查询数据的情况下进行批量删除,您可以使用HQL:

session.createQuery("delete from MyClass where ...").executeUpdate();

答案 2 :(得分:0)

如果您决定使用ORM实现,为什么要这样做?

在ORM实施的应用程序下删除某些内容的正确步骤是:

  1. 使用相关的fieldA和fieldB
  2. 获取对象
  3. 删除对象

答案 3 :(得分:0)

要执行HQL DELETE,请使用Query.executeUpdate()方法

请参阅Batch processing