【发布时间】:2018-07-30 13:16:29
【问题描述】:
我有这个有点庞大的查询,当我在 SQL Server Management Studio 上运行它时,它会返回正确的结果:
SELECT a.id, a.name, 'ANALYSIS' AS type, NULL, NULL, NULL FROM Analysis a WHERE a.category_neoId IS NULL
UNION
SELECT bp.neoId, bp.name, 'BUSINESS_PERFORMANCE' AS type, sc.defaultPermission, sp.flags, sp.securityEntity_neoId FROM BPQuery bp LEFT JOIN SecurityController sc ON bp.userSecurityController_neoId = sc.neoId LEFT JOIN SecurityPermission sp ON bp.userSecurityController_neoId = sp.controller_neoId WHERE bp.category_neoId IS NULL
UNION
SELECT bpc.neoId, bpc.name, 'BUSINESS_PERFORMANCE_CONSOLIDATED' AS type, NULL, NULL, NULL FROM BPConsolidatedQuery bpc WHERE bpc.category_neoId IS NULL
UNION
SELECT ip.neoId, ip.name, 'INDICATORS_PANEL' AS type, sc.defaultPermission, sp.flags, sp.securityEntity_neoId FROM NeoDashBoard ip LEFT JOIN SecurityController sc ON ip.userSecurityController_neoId = sc.neoId LEFT JOIN SecurityPermission sp ON ip.userSecurityController_neoId = sp.controller_neoId WHERE ip.category_neoId IS NULL
UNION
SELECT r.neoId, r.name, 'REPORT' AS type, sc.defaultPermission, sp.flags, sp.securityEntity_neoId FROM NeoReport r LEFT JOIN SecurityController sc ON r.userSecurityController_neoId = sc.neoId LEFT JOIN SecurityPermission sp ON r.userSecurityController_neoId = sp.controller_neoId WHERE r.category_neoId IS NULL
但是,当我在 entityManager.createNativeQuery(thisHugeQuery).getResultList() 上运行它时,它会引发以下异常:
org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasException: Encountered a duplicated sql alias [] during auto-discovery of a native-sql query
我真的找不到任何真正的重复查询。 SecurityPermission 和 SecurityController 是唯一重复的别名(sc 和 sp),但据我所知,因为我没有从中选择,只是加入和引用相同的表,所以对于休眠以正确识别它。
【问题讨论】:
-
在第一个选择中,您有三倍
NULL, NULL, NULL并且没有别名。你应该给他们一个。 (当然他们每个人都有不同的别名)
标签: sql sql-server hibernate