Гибернация и комплекс много-к-одному на две колонки - PullRequest
0 голосов
/ 11 июля 2011

У меня есть таблица BUSINESS, которая выглядит следующим образом:

BUSINESS_ID | BRN | CODE | PARENT_ID

A Business может иметь parentBusiness, которая объединяется из child.parent_id->parent.brn and child.code->parent.code и может быть представлена ​​запросом:

select * from business childbus left join business parentbus on childbus.parent_id=parentbus.brn and childbus.yppa_code=parentbus.yppa_code where childbus.business_id=?

Как я могу создать такое отношение многие-к-одному для business.parentBusiness?Следующее сопоставление многие-к-одному создает ссылку от PARENT_ID до BRN, но как мне получить ограничение из столбца CODE там?

<many-to-one name="parentBusiness" class="Business" column="PARENT_ID" property-ref="brn"/>

РЕДАКТИРОВАТЬ

В ответе ниже было предложено использовать formula.Согласно документации формула должна возвращать только PK для объекта, и она выяснит, как ее заполнить.Вот где я нахожусь:

<many-to-one name="parentBusiness">
    <formula>(select parentBusiness.business_id from business parentBusiness where parentBusiness.brn=parent_id and parentBusiness.code=code)</formula>
</many-to-one>

Но это создает ошибку sql

...
from Business business0_
left outer join Business business1_ on
    (select parentBusiness.business_id from business parentBusiness where parentBusiness.brn=business0_.parent_id and parentBusiness.code=business0_.code)=business1_.BUSINESS_ID

, потому что, конечно,

ORA-01799: a column may not be outer-joined to a subquery

Как должна быть моя формуланастроить?

Большое спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 11 июля 2011

вы можете попытаться использовать атрибут formaula. здесь - некоторая документация о том, как его использовать ...

1 голос
/ 24 апреля 2012

Мне так и не удалось заставить эти сложные отношения работать, как указано в исходном вопросе Однако я смог убедить руководство в том, что это плохая модель данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...