Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将带有subselect的SQL查询转换为Hibernate命名查询时出现问题_Java_Sql_Hibernate - Fatal编程技术网

Java 将带有subselect的SQL查询转换为Hibernate命名查询时出现问题

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

我有两个表,我想使用两个表中的字段从表A中选择表B中引用的条目

用于引用条目的两个字段是数字字段,因此下面的查询执行我想要的操作,但由于乘法和表B很大,因此速度较慢

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