计算Hibernate公式字段中的子表值

Jot*_*thi 2 java hibernate

我在 Hibernate 属性公式字段中遇到问题 - 我无法组合两个表列。

shift_id列所属的父表job_cardduration列所属的子表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>
Run Code Online (Sandbox Code Playgroud)

结果查询:

    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
Run Code Online (Sandbox Code Playgroud)

我想要这样。

    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
Run Code Online (Sandbox Code Playgroud)

我如何做到这一点?

Chs*_*y76 6

这种类型的查询最好映射为查询而不是派生属性。

公式只能包含基于当前表列的 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)
Run Code Online (Sandbox Code Playgroud)

当您引用没有别名的列时,它将在查询执行期间以主实体表的别名为前缀。但是请注意,上述内容不会满足您的要求,因为您无法根据外部条件在子选择中进行分组。此外,根据您的数据库,可能不支持子选择中的左外连接。