Я снова прошу прощения за этот вопрос. Я очень удивлен тем, как работает Hibernate, это действительно круто. Я не думал, что это все сделает автоматически, и я даже не знал, о чем пытаюсь спросить. Отвечая на комментарии, я начал уточнить вопрос в своей голове и смог найти ответ, который искал. Спасибо всем, кто помог.
Ответ: hibernate делает это автоматически.
Предположим, у вас есть таблица A базы данных с первичным ключом "id" и таблица B с первичным ключом "a_id", который ссылается на таблицу A.
Итак, вы создаете следующие классы (сокращенно):
public class A {
private String aProperty;
// ... getter and setter, etc
{
public class B extends A {
private String bProperty;
// ... getter and setter, etc
}
Затем сопоставьте их так:
<hibernate-mapping>
<class name="A" table="a" catalog="testokdelete">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="aProperty" column="a_property"/>
<joined-subclass name="B" table="b">
<key column="a_id"/>
<property name="bProperty" column="b_property"/>
</joined-subclass>
</class>
</hibernate-mapping>
И вы можете вернуть объекты A и B, используя простой запрос "from A", как показано в следующем коде:
Query query = session.createQuery("from A");
List<Object> objects = query.list();
for (Object object: objects) {
System.out.print("A property: ");
System.out.print(((A)object).getAProperty());
System.out.print(", B property: ");
System.out.println( (object.getClass() == B.class) ? ((B)object).getBProperty() : "not a B");
}
Все, что он делает - возвращает список объектов, используя запрос «из А», а затем просматривает их, распечатывая aProperty из нашего класса A и, если класс имеет тип B, bProperty из нашего класса B. 1016 *
Запрос гибернации в этом случае автоматически полиморфен и при необходимости даст вам объект B.