Учтите, что у меня есть отношение один ко многим между двумя объектами с параметром cascade = "save-update, delete" для коллекции.Удаление родительского объекта методом hibernate delete () удаляет дочерние элементы, но тот же запрос в hql этого не делает.Интересно, почему так?Вот мой пример кода.
HQL Delete (не удаляет дочерние элементы)
Session session = getSession();
String queryStr = "delete from SuperParent where name='" + objName + "'";
Query query = session.createQuery(queryStr);
int noOfRows deleted = query.executeUpdate();
Метод Delete (удаляет дочерние элементы)
Session session = getSession();
String queryStr = "from SuperParent where name='" + objName + "'";
Query query = session.createQuery(queryStr);
List<SuperParent> symbols = query.list();
for (SuperParent symbol : symbols)
{
session.delete(symbol);
}
Проблема, которую я вижу со вторым фрагментом кода, заключается в производительности.Он загружает все записи в память, а затем удаляет его.Обычно мы имеем дело с огромным количеством данных, и выделение всех из них только с целью удаления не является разумной идеей.
РЕДАКТИРОВАТЬ
Я читал этоpost Hibernate удаляет объекты на каскаде .
Массовое удаление не происходит каскадно
Но мне интересно, почему так, и предлагается следующее решение: «сначала удалить дочерние элементы, а затем удалить родительские»,Я не очень убежден в решении bcoz в рамках, в основном дети неизвестны, кто ссылается на родителя и хочет удалить его, когда родитель удаляется.Поэтому в таких случаях мы должны обязательно извлекать и удалять записи?
Ниже приведен пример случая, в котором я пытаюсь удалить SuperParent
<hibernate-mapping>
<subclass discriminator-value="ParentTable" extends="mypackage.SuperParent" name="mypackage.ParentTable">
<set name="childTable" table="ChildTable" cascade="save-update,delete" lazy="false" fetch="select">
<key>
<column name="ID" not-null="true" />
</key>
<one-to-many class="com.webnms.m2m.model.ChildTable" />
</set>
<join fetch="select" table="ParentTable">
<key on-delete="cascade">
<column name="ID"/>
</key>
<property column="ParentTableNAME" length="100" name="ParentTableName" type="string"/>
</join>
</subclass>
</hibernate-mapping>
Пожалуйста, дайте мне знать, если вам требуется более подробная информация ото же самое, чтобы пролить свет на это.Спасибо.