Мне нужна помощь с проблемой дизайна. У меня возникают проблемы, когда я не могу понять, как спроектировать объект (или, может быть, несколько объектов), чтобы я мог запрашивать его так, как мне хотелось бы.
Позвольте мне начать с показа запроса sql, который возвращает именно ту информацию, которую я хочу:
select distinct rights_table.receiver_guid, user_info.name
from rights_table
inner join user_info
on rights_table.receiver_guid = user_info.guid
where rights_table.giver_guid = '_this_is_the_argument_'
Таким образом, user_info имеет одну запись для каждого пользователя. правая_таблица содержит информацию о правах, которые giver_guid делегировал получателю. Мне все равно, какие права есть сейчас - я просто хочу иметь возможность взять giver_guid и получить список всех руководств и имен тех, на кого он дал права. У меня возникают проблемы с концептуализацией того, как преобразовать эти таблицы в объектную модель таким образом, чтобы я мог выполнить этот запрос.
Если это помогает узнать, receive_guid и giver_guid оба (могут быть оба) сопоставления «многие к одному» с user_info.guid. user_info.guid - это ПК для этой таблицы; pk на rights_table - это еще один столбец, не упомянутый здесь.
Редактировать: Мое решение:
Как предложил Тим, я поместил сопоставления "многие к одному" в таблицу объектов "объект", которая связывала таблицу прав с таблицей пользователей. Мне потребовалось некоторое время, чтобы понять, что Hibernate объединяет для вас простоту, когда вы выполняете такие сопоставления, поэтому вот что я в основном закончил для HQL:
String hqlQuery =
"select right.recipient_guid, user.name " +
"from rightsTable right, userInfo user " +
"where right.recipient_guid = user.guid and right.giver_guid like :giver_guid";
Честно говоря, я даже не знаю, происходят ли там закулисные объединения, но я знаю, что это дает мне информацию, которую я изначально хотел. Если у кого-то есть предложения по более эффективному выполнению этого запроса, сообщите мне.