Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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 两个表具有相同列名时的UnuniqueDiscoverySqlAliasException_Java_Sql_Hibernate - Fatal编程技术网

Java 两个表具有相同列名时的UnuniqueDiscoverySqlAliasException

Java 两个表具有相同列名时的UnuniqueDiscoverySqlAliasException,java,sql,hibernate,Java,Sql,Hibernate,我有两个表Item和Nikasa——其定义如下: Item{id,name,spec}和Nikasa{id,date,Item_id}。此处Item_id表示Item.id 我做了一个简单的原生SQL连接,只选择Item.id和Nikasa.id作为: Session s = getSession(); SQLQuery sq = s.createSQLQuery("SELECT it.id, nik.id FROM item it LEFT JOIN nikasa nik ON (it.id

我有两个表
Item
Nikasa
——其定义如下:

Item{id,name,spec}
Nikasa{id,date,Item_id}。
此处
Item_id
表示
Item.id

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

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();
但是我得到了异常
ununiquediscoveredsqlaliasexception:在自动发现本机sql查询的过程中遇到了重复的sql别名[ID]
List result=sq.List()行

堆栈跟踪:

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)

你能告诉我发生了什么事吗

您需要设置结果别名

SELECT it.id as itemid, nik.id as nikasaid FROM item it LEFT JOIN nikasa nik ON (it.id = nik.item_id)

如果在SQL workbench中运行查询,您将发现表名与两列的id相同。Hibernate将其视为重复的,因此需要别名。 假设您有以下问题:

SELECT it.id, nik.id FROM item it LEFT JOIN nikasa nik ON (it.id = nik.item_id)
SQL workbench上的列名输出将为:

id | id |
它在那里正常工作。 但对于hibernate,它需要唯一的列名。因此,您需要在列中的任何一个中添加别名

SELECT it.id as it_id, nik.id FROM item it LEFT JOIN nikasa nik ON (it.id = nik.item_id)


或者给这两列都加一个别名。

看起来我解决了这个问题
选择it.id作为iid,nik.id作为nid
完成了这个谜团。嗨,我在Hibernate 3中遇到了一个异常。您测试了哪个版本?你能确认一下吗。谢谢,Kathir如果我想得到所有列的结果,而不是一些列呢?
SELECT it.id , nik.id as nik_id FROM item it LEFT JOIN nikasa nik ON (it.id = nik.item_id)