HSQLDB:遇到重复的 sql 别名
Posted
技术标签:
【中文标题】HSQLDB:遇到重复的 sql 别名【英文标题】:HSQLDB: Encountered a duplicated sql alias 【发布时间】:2016-10-20 15:24:02 【问题描述】:当我使用 java 程序中的自联接执行此查询时
Query query = session.createSQLQuery("SELECT DISTINCT * " +
"FROM lerneinheit AS le1 JOIN lerneinheit AS le2 " +
"ON le1.datum = le2.datum AND le1.pid = le2.pid " +
" WHERE " +
" le1.datum BETWEEN '2016-10-20' AND '2016-10-20' AND " +
" le1.pid = 3 AND " +
" (le1.abgesagtrechtzeitig = false OR le1.nichtabgesagt = true OR le1.erschienen=true) AND " +
" (le2.abgesagtrechtzeitig = false OR le2.nichtabgesagt = true OR le2.erschienen=true) AND " +
" le1.lernid!= le2.lernid AND " +
" (le2.beginn+1 BETWEEN le1.beginn AND le1.ende OR le2.ende-1 BETWEEN le1.beginn AND le1.ende) " +
" ORDER BY le1.beginn");
我收到以下错误:
org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasException: Encountered a duplicated sql alias [LERNID] during auto-discovery of a native-sql query
虽然如果我从 phpAdmin 执行此操作,它可以正常工作。我在该主题上找到的所有内容都没有帮助。有人知道如何解决这个问题吗?
【问题讨论】:
不要使用SELECT DISTINCT *
,而是使用您实际需要的所有列的名称。使用列别名来区分两个表别名中的同一列。
@fredt 我的目的是获得一个管理 Lerneinheit-Objects 的列表。但似乎我将使用此查询来获取所有 id,并在另一个函数中尝试通过它们的 id 检索对象。
即便如此,您也不希望 SELECT 的每一行中有两个对象。你可以试试SELECT DISTINCT le1.* FROM ...
【参考方案1】:
我不确定,但 !=
的 HQL 等效项是 <>
,所以你应该写 " le1.lernid <> le2.lernid AND"
顺便说一句,我推荐:
Query query = session.createSQLQuery("SELECT DISTINCT * " +
"FROM lerneinheit AS le1 JOIN lerneinheit AS le2 " +
"ON le1.datum = le2.datum AND le1.pid = le2.pid " +
" WHERE " +
" le1.datum BETWEEN :dateMin AND :dateMax AND " +
" le1.pid = :le1Pid AND " +
" (le1.abgesagtrechtzeitig = false OR le1.nichtabgesagt = true OR le1.erschienen=true) AND " +
" (le2.abgesagtrechtzeitig = false OR le2.nichtabgesagt = true OR le2.erschienen=true) AND " +
" le1.lernid!= le2.lernid AND " +
" (le2.beginn+1 BETWEEN le1.beginn AND le1.ende OR le2.ende-1 BETWEEN le1.beginn AND le1.ende) " +
" ORDER BY le1.beginn");
query.setParametter("dateMin", "2016-10-20");
query.setParametter("dateMax", "2016-10-20");
query.setParametter("le1Pid", 3);
【讨论】:
谢谢。我实际上使用 query.setParametter。但为了测试目的,我对其进行了硬编码。以上是关于HSQLDB:遇到重复的 sql 别名的主要内容,如果未能解决你的问题,请参考以下文章