Нередко представлять ассоциацию между объектами путем сохранения идентификатора ассоциированного объекта, а не самого ассоциированного объекта. Хранение объекта является более выразительным и безопасным с точки зрения типов и не должно влиять на производительность, поскольку в hibernate есть прокси с отложенной загрузкой.
Но, конечно, вы можете объединять вещи, не отображаемые как ассоциации, в файл сопоставления. Цитирование справочного руководства по :
Может появиться несколько классов, в результате чего
в декартовом произведении или "крест"
присоединиться.
from Formula, Parameter
from Formula as form, Parameter as param
и
Запросы могут возвращать несколько объектов
и / или свойства как массив типа
Object []:
select mother, offspr, mate.name
from DomesticCat as mother
inner join mother.mate as mate
left outer join mother.kittens as offspr
или в виде списка:
select new list(mother, offspr, mate.name)
from DomesticCat as mother
inner join mother.mate as mate
left outer join mother.kittens as offspr
Или - при условии, что класс Family
имеет соответствующий конструктор - как
фактический типобезопасный Java-объект:
select new Family(mother, mate, offspr)
from DomesticCat as mother
join mother.mate as mate
left join mother.kittens as offspr
Вы можете назначить псевдонимы выбранным
выражения, использующие как:
select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n
from Cat cat
Это наиболее полезно, когда используется вместе
с выбором новой карты:
select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n )
from Cat cat
Этот запрос возвращает карту из псевдонимов
до выбранных значений.
Объединяя это с простым предложением where, мы получаем:
select product, item
from Product product, Item item
where item.product_id = product.product_id
Редактировать : Я пропустил, что вы хотите external join. В этом случае я не знаю другого способа, кроме сопоставления ассоциации, чтобы вы могли сделать обычное объединение. Обратите внимание, что для этого не требуется конкретная форма результата запроса, то есть вы все равно можете сделать:
select product, item
from Item item
left join item.product as product