любой образец для пакетной обработки в спящем режиме? - PullRequest
2 голосов
/ 16 сентября 2010

Могу ли я найти пример пакетной обработки в java hibernate, чтобы я мог выполнять запросы на удаление двух таблиц.

Ответы [ 2 ]

2 голосов
/ 16 сентября 2010

Документация включает главу об операциях в стиле DML:

13.4.Операции в стиле DML

Как уже обсуждалось, автоматическое и прозрачное сопоставление объекта / реляции связано с управлением состоянием объекта.Состояние объекта доступно в памяти.Это означает, что манипулирование данными непосредственно в базе данных (с использованием языка манипулирования данными SQL (DML) операторов: INSERT, UPDATE, DELETE) не повлияет на состояние в памяти.Однако Hibernate предоставляет методы для массового выполнения операторов DML в стиле SQL, которые выполняются с помощью языка запросов Hibernate (HQL).

Псевдосинтаксис для операторов UPDATE и DELETE: ( UPDATE | DELETE ) FROM? EntityName (WHERE where_conditions)?.

Некоторые моменты, на которые следует обратить внимание:

  • В предложении from ключевое слово FROM является необязательным
  • В предложении from может быть только одна сущность.Однако он может быть псевдонимом.Если имя объекта является псевдонимом, то любые ссылки на свойства должны быть уточнены с использованием этого псевдонима.Если имя сущности не является псевдонимом, то любые ссылки на свойства недопустимы.
  • Нет объединений , неявных или явных, может быть указано в массовом запросе HQL.Подзапросы могут использоваться в предложении where, где сами подзапросы могут содержать объединения.
  • Предложение where также необязательно.

(...)

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

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

String hqlDelete = "delete Customer c where c.name = :oldName";
// or String hqlDelete = "delete Customer where name = :oldName";
int deletedEntities = s.createQuery( hqlDelete )
        .setString( "oldName", oldName )
        .executeUpdate();
tx.commit();
session.close();

Значение int, возвращаемое *Метод 1033 * указывает количество объектов, на которые воздействует операция.Это может или не может соотноситься с количеством строк в базе данных.Массовая операция HQL может привести к выполнению нескольких реальных операторов SQL (например, для присоединенного подкласса).Возвращенное число указывает на количество реальных объектов, затронутых оператором.Возвращаясь к примеру объединенного подкласса, удаление из одного из подклассов может фактически привести к удалению не только таблицы, в которую отображается этот подкласс, но также корневой таблицы и таблиц потенциально присоединенного подкласса ниже поиерархия наследования.

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

2 голосов
/ 16 сентября 2010

Ознакомьтесь с соответствующей главой справочника Hibernate .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...