gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:03:57 26 4
gpt4 key购买 nike

我在 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

我如何实现这一目标?

最佳答案

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

Formula只能包含基于当前表中的列的 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)

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

关于java - 计算Hibernate公式字段中的子表值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1553204/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com