Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.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 HQL使用复杂插入生成错误查询_Java_Oracle_Hibernate - Fatal编程技术网

Java HQL使用复杂插入生成错误查询

Java HQL使用复杂插入生成错误查询,java,oracle,hibernate,Java,Oracle,Hibernate,我需要在FK中的一个表中插入大量数据,另一个表中有两个大字段 HQL查询是: insert into DeviceAuthorizationEntry (id, osc, moduleName, delegateModule, functionName, groupName, owner) select concat(item0.id.uuid, '1413971469473'), item0.osc, 'aaaaaaaa', 'devices', 'view_device

我需要在FK中的一个表中插入大量数据,另一个表中有两个大字段

HQL查询是:

insert into DeviceAuthorizationEntry (id, osc, moduleName, delegateModule, functionName, groupName, owner) 
   select concat(item0.id.uuid, '1413971469473'),  item0.osc, 'aaaaaaaa',
      'devices', 'view_devices', 'administrator', item0 
   from device.model.Device as item0 
   where item0.osc IN (:oscNameList0) 
   and item0.nodeTypeDefinition.QN IN (:nodeTypesList0) 
   and not exists (select 1 from device.model.DeviceAuthorizationEntry as auth 
                 where auth.moduleName != 'aaaaaaa' 
                       and auth.delegateModule != 'devices' 
                       and auth.functionName != 'view_devices' 
                       and auth.groupName != 'administrator' 
                       and auth.owner != item0 )
但在Oracle上执行的是:

INSERT
INTO DeviceAuthorizationEntry
  (
    id,
    osc,
    moduleName,
    delegateModule,
    functionName,
    groupName,
    owner_uuid
  )
SELECT device0_.uuid
  ||'1413965664136' AS col_0_0_,
  device0_.osc      AS col_1_0_,
  'aaaaaaaa'    AS col_2_0_,
  'devices'         AS col_3_0_,
  'view_devices'    AS col_4_0_,
  'administrator'   AS col_5_0_,
  device0_.uuid     AS col_6_0_
FROM dem_device device0_,
  cor_noddef nodetypede1_
WHERE device0_.uuid_ndtypedef=nodetypede1_.uuid
AND 1                        =1
AND (device0_.osc           IN (? , ?))
AND (nodetypede1_.QN        IN (? , ? , ? , ? , ? , ? , ? , ? , ?))
AND NOT (EXISTS
  (SELECT 1
  FROM DeviceAuthorizationEntry deviceauth2_
  WHERE deviceauth2_.moduleName  <>'aaaaaaaa'
  AND deviceauth2_.delegateModule<>'devices'
  AND deviceauth2_.functionName  <>'view_devices'
  AND deviceauth2_.groupName     <>'administrator'
  AND deviceauth2_.owner_uuid    <>uuid
  ))
正如您在exists子查询的最后一个和中所看到的,hibernate在uuid字段前面没有别名device0\uID

Hibernate支持插入select,正如您在这里看到的那样


我不知道我错在哪里。

uuid在这里真的很模糊吗?是的,正如您从HQL查询中看到的,hibernate应该将item0的别名放在uuid之前。我对HQL不是很熟悉,所以请原谅我在这里使用的词汇不正确,但将item0同时用作列名和表别名是否合法?从…中选择…,项目0。。。正如第0项,Hibernate中有一个bug:可能是你的问题是的,这个bug表明了我的问题。我尝试了建议的解决办法,但对我来说不起作用。因此,我需要找到另一种方法来执行相同的查询。