Hibernate - как удалить с условием без загрузки в память? - PullRequest
3 голосов
/ 06 июля 2011

У меня есть объект -

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

У меня нет экземпляра, но я хочу удалить все строки в БД, которые имеют 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 ]

2 голосов
/ 06 июля 2011

Взгляните на использование native sql в hibernate и session.createSQLQuery, чтобы убедиться, что hibernate не связывается с проводкой bean-компонентов с HSQL.

Также избегайте использования конкатенации строк для построения ваших запросов. И, наконец, ваша база данных больше всего будет похожа на бутылочку с простым запросом, подобным этому, поэтому убедитесь, что у вас есть правильные индексы в таблице.

0 голосов
/ 08 июля 2011

Чтобы выполнить HQL DELETE, используйте метод Query.executeUpdate ()

См. Пакетная обработка

0 голосов
/ 08 июля 2011

зачем вам это делать, если вы решили внедрить использование ORM?

Правильная процедура удаления чего-либо в приложении ORM:

  1. получить объект с соответствующими полями A и fieldB
  2. удалить объект
0 голосов
/ 06 июля 2011

Да, чтобы выполнить пакетное удаление без предварительного запроса данных, вы должны использовать HQL:

session.createQuery("delete from MyClass where ...").executeUpdate();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...