Hello
Я использую одну таблицу для каждого наследования иерархии классов с устаревшими данными, как описано здесь
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html#inheritance-tableperclass
вот как примерно выглядит мое отображение
<class abstract="true" name="note" table="NOTES">
<id name="id" type="long" column="NOTE_ID">
<generator class="native"/>
</id>
<discriminator column="NOTE_TYPE" type="string"/>
<property name="orderId" column="ORDER_ID"/>
<property name="text" column="TEXT"/>
<subclass name="PurchaseNote" discriminator-value="PUR" />
<subclass name="CancelNote" discriminator-value="CAN" />
<subclass name="RefundNote" discriminator-value="REF" />
</class>
Для каждого заказа может быть много подклассов заметок
Примечания описываются как ассоциации в Классе заказа, что-то вроде
<class name="order" table="ORDERS">
<id name="id" type="long" column="ORDER_ID">
<generator class="native"/>
</id>
.....
<set name="purchaseNotes">
<key column="orderId" />
<one-to-many class="PurchaseNote"/>
</set>
<set name="cancelNotes">
<key column="orderId" />
<one-to-many class="cancelNote"/>
</set>
<set name="refundNotes">
<key column="orderId" />
<one-to-many class="refundNote"/>
</set>
</class>
Я могу получить связанные коллекции, извлеченные из Hibernate, если я сделаю следующее.
1) Используйте предложение «Где» в определении набора в порядке xml
или же
2) Используйте force = "true" как часть определения дискриминатора в примечаниях xml
Я также могу при вызове DAO через сеанс гибернации из фабрики сеансов использовать HQL
"из RefundNote, где orderId =?"
или же
"из Note note, где note.class = RefundNote и orderId =?" чтобы получить список правильных подклассов RefundNote и заполнить список в классе Order, используя установщик refundNotes.
Все стандартные вещи в спящем режиме?
Любой из этих методов создает коллекции, запускающие 3 запроса (по одному для каждой коллекции) в одну и ту же таблицу. По мере роста числа подклассов это кажется неэффективным ....?
Я много читал, но не вижу способа, чтобы hibernate (через стратегии выборки, соединения, выборки и т. Д.) Мог минимизировать эти вызовы до одного вызова db и по-прежнему заполнять мои коллекции ...? *
Я могу получить все заметки и выполнить итерации в Java для создания коллекций с помощью проверки class.simpleName, но мне было интересно, пропущу ли я что-нибудь, что сделает hibernate .....?
Спасибо за любой совет