Вычислить значения дочерней таблицы в поле формулы Hibernate - PullRequest
1 голос
/ 12 октября 2009

В поле формулы свойства Hibernate возникла проблема - я не могу объединить оба столбца таблицы.

Столбец

shift_id принадлежит родительской таблице job_card, а столбец duration принадлежит дочерней таблице job_card_idle_time. Но он считает оба столбца принадлежащими родительской таблице job_card.

<property
    name="utilization"
    formula="(count(shift_id)*340)-sum(duration)/(count(shift_id)*340)"
    generated="never"
    insert="false"
    update="false"
    type="float">
</property>

С результирующим запросом:

    select (count(this_.shift_id)*340)-sum(**this_.duration**) /(count(this_.shift_id)*340) as y0_,
    this_.JOB_CARD_DATE as y1_ 
    from job_card this_ 
    left outer join job_card_idle_time ir1_ on this_.JOB_CARD_ID=ir1_.JOB_CARD_ID 
    where this_.JOB_CARD_DATE between ? and ? 
    group by this_.JOB_CARD_DATE 
    order by this_.JOB_CARD_DATE desc

Я хочу это так.

    select (count(this_.shift_id)*340)-sum(**ir1_.duration**)
    /(count(this_.shift_id)*340) as y0_,
     this_.JOB_CARD_DATE as y1_ 
    from job_card this_ 
    left outer join job_card_idle_time ir1_ on this_.JOB_CARD_ID=ir1_.JOB_CARD_ID 
    where this_.JOB_CARD_DATE between ? and ? 
    group by this_.JOB_CARD_DATE 
    order by this_.JOB_CARD_DATE desc

Как мне этого добиться?

1 Ответ

4 голосов
/ 12 октября 2009

Этот тип запроса лучше всего отображать как запрос, а не как производное свойство.

Формула может содержать только выражения SQL на основе столбцов из текущей таблицы. Единственный способ использовать столбцы из других таблиц - написать формулу в качестве дополнительного выбора:

(SELECT count(card.shift_id) * 340 - sum(idleTime.duration) / (count(card.shift_id) * 340)
   FROM job_card card
   LEFT OUTER JOIN job_card_idle_time idleTime on card.job_card_id = idleTime.job_card_id
  WHERE card.shift_id = shift_id)

Когда вы ссылаетесь на столбец без псевдонима, он будет иметь префикс с псевдонимом вашей основной таблицы сущностей во время выполнения запроса. Тем не менее, обратите внимание, что вышеприведенное не будет делать то, что вы хотите, потому что вы не можете группировать в рамках дополнительного выбора на основе внешних критериев. Кроме того, в зависимости от вашей базы данных левое внешнее объединение в рамках дополнительного выбора может не поддерживаться.

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