首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当两个表具有相同的列名时,NonUniqueDiscoveredSqlAliasException

当两个表具有相同的列名时,NonUniqueDiscoveredSqlAliasException
EN

Stack Overflow用户
提问于 2012-05-19 08:58:09
回答 2查看 34.6K关注 0票数 27

我有两个表ItemNikasa -它们的定义类似于:

Item { id, name, spec}Nikasa {id, date, item_id}.在这里item_id代表Item.id

我做了一个简单的原生SQL,只选择Item.idNikasa.id作为:

代码语言:javascript
复制
Session s = getSession();
SQLQuery sq = s.createSQLQuery("SELECT it.id, nik.id FROM item it LEFT JOIN nikasa nik ON (it.id = nik.item_id)");
List result = sq.list();

但是我得到了异常NonUniqueDiscoveredSqlAliasException : Encountered a duplicated sql alias [ID] during auto-discovery of a native-sql queryList result=sq.list();

堆栈-跟踪:

代码语言:javascript
复制
org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasException: Encountered a duplicated sql alias [ID] during auto-discovery of a native-sql query
    at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:594)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1986)
    at org.hibernate.loader.Loader.doQuery(Loader.java:829)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289)
    at org.hibernate.loader.Loader.doList(Loader.java:2463)
    at org.hibernate.loader.Loader.doList(Loader.java:2449)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2279)
    at org.hibernate.loader.Loader.list(Loader.java:2274)
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:331)
    at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1585)
    at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:224)
    at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:156)

你能告诉我怎么回事吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-19 09:00:24

您需要设置结果别名。

代码语言:javascript
复制
SELECT it.id as itemid, nik.id as nikasaid FROM item it LEFT JOIN nikasa nik ON (it.id = nik.item_id)
票数 48
EN

Stack Overflow用户

发布于 2020-01-06 09:57:40

如果在SQL工作台中运行查询,您将发现表名与两列的id相同。Hibernate将其视为复制,因此需要一个别名。让我们假设您有疑问:

代码语言:javascript
复制
SELECT it.id, nik.id FROM item it LEFT JOIN nikasa nik ON (it.id = nik.item_id)

SQL工作台上列名的输出将是:

代码语言:javascript
复制
id | id |

在那里是正确的。但是对于hibernate,它需要唯一的列名。因此,您需要在列中的任何人中添加别名。

代码语言:javascript
复制
SELECT it.id as it_id, nik.id FROM item it LEFT JOIN nikasa nik ON (it.id = nik.item_id)

代码语言:javascript
复制
SELECT it.id , nik.id as nik_id FROM item it LEFT JOIN nikasa nik ON (it.id = nik.item_id)

或者给这两个列都提供别名。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10663785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档