hibernate - 如何在不加载到内存的情况下进行条件删除

时间:2011-07-07 07:11:57

标签: hibernate

我有一个对象 -

 @Entity
 public class myObject{
      public MySecondObject objA;
      public MySecondObject objB;
      ...
 }

我没有任何实例,但我想删除db中的所有行 fieldA == thirdObj 我有第三个OBJ的实例,但没有myobjects的实例。 可以使用本机sql来完成它。但是我需要使用自动分配的第三个id的id - 在db中进行比较 有比这更优雅的方式吗?

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

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

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

2 个答案:

答案 0 :(得分:3)

它应该与HQL一起使用

session
  .createQuery("delete from MyObject where objA = :third")
  .setEntity("third", thirdObject)
  .executeUpdate();

但是有一些限制:HQL删除不会级联(大多数)引用,如果有子类,则不识别实际类型。如果你的班级是一个简单的班级,那就可以了。

答案 1 :(得分:1)

a)在您的示例中,您使用的是HQL,而不是本机SQL。差异很大。
b)不,这是两种可能性。删除一个对象(但必须先加载它)或按id删除(但这只能通过HQL或本机SQL实现)。