#java #hibernate #hibernate-mapping #hbm
#java #переход в спящий режим #переход в спящий режим-отображение #hbm
Вопрос:
допустим, у меня есть сопоставление набора в родительском файле hbm:
<set cascade="all" inverse="true" lazy="false" name="children">
<key column="parentChildId" foreign-key="fk_fk" not-null="true" on-
delete="cascade"/>
<one-to-many class="Child" not-found="ignore"/>
</set>
Возможно ли каким-либо образом определить в родительском hbm дочерний элемент по умолчанию, чтобы при создании любого родительского элемента внутри этого набора добавлялся один дочерний элемент????
Я знаю, это звучит странно, но из-за некоторой проблемы с производительностью я должен попытаться создать как можно меньше вызовов на сервер (здесь один сохранял родительский, а другой — дочерний вызов по умолчанию).
Я ценю всю помощь.
Спасибо
Ответ №1:
Что вы подразумеваете под «сервером»? Вы имеете в виду сервер базы данных? Если это так, то нет способа создать родительский элемент и дочерний элемент в одном операторе SQL. Но Hibernate использует пакетные обновления, поэтому он должен быть очень эффективным.
Если вы имеете в виду «сервер приложений», то это звучит как функциональная проблема, а не техническая. Измените свой родительский метод создания, чтобы он одновременно создавал дочерний. Вы могли бы даже сделать это, используя фабричный метод в родительском классе :
public class Parent {
public static Parent createParentWithDefaultChild() {
Parent p = new Parent();
p.addChild(new Child());
return p;
}
// ...
}
Комментарии:
1. Нет, я не имел в виду сервер базы данных, я имел в виду сервер приложений, как вы сказали во втором пункте. ХОРОШО, спасибо за ответ, я понимаю, что это можно было бы сделать так, но просто для подтверждения, это невозможно сделать в HBM?
2. Нет, это невозможно. Файлы HBM используются для определения сопоставлений, а не функциональных правил.