Java 将带有subselect的SQL查询转换为Hibernate命名查询时出现问题
我有两个表,我想使用两个表中的字段从表A中选择表B中引用的条目 用于引用条目的两个字段是数字字段,因此下面的查询执行我想要的操作,但由于乘法和表B很大,因此速度较慢Java 将带有subselect的SQL查询转换为Hibernate命名查询时出现问题,java,sql,hibernate,Java,Sql,Hibernate,我有两个表,我想使用两个表中的字段从表A中选择表B中引用的条目 用于引用条目的两个字段是数字字段,因此下面的查询执行我想要的操作,但由于乘法和表B很大,因此速度较慢 select * from TIBP where IBP_CODE * 100 + IBP_BASE in (select FZGLP_CODE * 100 + FZGLP_BASE from TFZGLP) 我已成功将其映射到以下HQL命名查询: <query name="findWhereReferenced
select * from TIBP
where IBP_CODE * 100 + IBP_BASE in
(select FZGLP_CODE * 100 + FZGLP_BASE from TFZGLP)
我已成功将其映射到以下HQL命名查询:
<query name="findWhereReferencedInZglp">
select tibp
from TibpEntity as tibp
where tibp.code * 100 + tibp.base in
(select zglp.code * 100 + zglp.base from ZglpEntity as zglp)
</query>
遗憾的是,我还没有成功地将其转换为可以解析的命名HQL查询。使用HQL/Hibernate是否可能实现这一点?您是否尝试过使用内部联接;类似于以下SQL:
select A.*,distinct B.FZGLP_CODE, B.FZGLP_BASE
from TFZGLP B
inner join TIBP A on A.IBP_CODE = B.FZGLP_CODE
where A.IBP_BASE = B.FZGLP_BASE
您可以轻松地将其转换为hibernate。My DB由于distinct的位置而阻塞了您的语句。它可用于以下操作,但显然不会返回正确的数据:从TFZGLP B内部连接TIBP A中选择A.*、B.FZGLP_代码、B.FZGLP_基,其中A.IBP_基=B.FZGLP_基,我已经成功地将您的SQL转换为我的数据库可以接受的内容,并返回我想要的内容:从TIBP中选择A.*从join中选择不同的FZGLP_代码作为代码,从TFZGLP_BASE中选择不同的FZGLP_BASE作为基,从TFZGLP as B中选择A.IBP_CODE=B.CODE,其中A.IBP_BASE=B.BASE遗憾的是,这并没有让我更进一步,因为我仍然无法轻松地将其转换为hibernate。到目前为止,我的尝试是:从BpEntity中选择bp作为bp join select distinct zglp.base,zglp.uicLaendercode=bp.uicLaendercode,其中zglp.bpUicCode=bp.bpCode,zglp.code来自ZglpEntity的zglp.code在zglp.uicLaendercode=bp.bpCode上的zglp.code在子选择的开口括号上仍然失败,这在我最初的尝试中已经是问题:ERROR org.hibernate.hql.internal.ast.ErrorCounter:第5行:9:意外标记:您可以改用group by吗?类似于从TFZGLP B中选择A.*在A.IBP_CODE=B.FZGLP_CODE上的内部连接TIBP A,其中A.IBP_BASE=B.FZGLP_BASE BASE group by B.FZGLP_CODE,B.FZGLP_BASE您可以找到有关distinct和group by性能的更多详细信息,感谢您的回复。我一直无法完成这项工作。不管我如何尝试,我总是收到以下错误:DB2错误代码-122,请参阅
select A.*,distinct B.FZGLP_CODE, B.FZGLP_BASE
from TFZGLP B
inner join TIBP A on A.IBP_CODE = B.FZGLP_CODE
where A.IBP_BASE = B.FZGLP_BASE