ORA-00918: “de la Colonne de manière ambiguë défini”

Je'va été à essayer de comprendre pourquoi Oracle est de relever cette erreur pendant des jours, mais n'a pas pu trouver une solution qui m'a aidé dans tous les sujets que j'ai lu. Je suis en espérant que quelqu'un pourrait m'aider.
Je suis en train de travailler sur cette requête :

SELECT distinct c.NAME, c.SUPERVISIONNAME, c.INTERNALADDRESS, c.IM, c.ID, c.LINK, c.IW, d.NAME, t.NAME
FROM "CONCENTRATOR" c
LEFT OUTER JOIN "CONCENTRATOR_GROUP" USING(CONCENTRATOR_ID)
LEFT OUTER JOIN "GROUP" g USING(GROUP_ID)
LEFT OUTER JOIN "TYPE" t USING(TYPE_ID)
LEFT OUTER JOIN "DEPARTMENT" d USING(DEPARTMENT_ID)
WHERE TRIM(UPPER(t.NAME)) = 'type'
ORDER BY im DESC, id DESC, link DESC, iw DESC, TRIM(UPPER(d.name)) ASC, TRIM(UPPER(c.name)) ASC;

Cela fonctionne parfaitement bien sur SQL Developer, mais soulève cette erreur lorsque vous exécutez en Java:

java.sql.SQLSyntaxErrorException: ORA-00918: column ambiguously defined
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:884)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1167)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1289)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3584)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3628)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1493)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
at sun.reflect.GeneratedMethodAccessor29.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
at com.sun.proxy.$Proxy39.executeQuery(Unknown Source)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1978)
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)
at com.francetelecom.visionet.server.persistance.dao.impl.TemplateDAOImpl.paginate(TemplateDAOImpl.java:282)
at com.francetelecom.visionet.server.persistance.dao.impl.ConcentratorDAOImpl.findByCriteriaTest(ConcentratorDAOImpl.java:545)

Causés par cette ligne sur mon programme (où querySelect est le SQLQuery objet):

List<T> list = (List<T>) querySelect.addEntity(referenceClass).list();

J'ai besoin de garder c.NOM.d.NOM et t.NOM dans le SÉLECTIONNER en raison de l'ORDRE et je ne sais pas comment faire cela sans élever cette erreur... j'ai essayé des alias dans le SELECT, mais ne fonctionne pas non plus.

EDIT:

Semble être un problème Hibernate , plus qu'un SQL.
Ici est la fonction de collecte de l'erreur, sur la "addEntity" de ligne. Dans ce cas, il est prévu pour renvoyer une liste de Concentrateur de l'objet.

@Override
@SuppressWarnings("unchecked")
public PaginatedList<T> paginate(SQLQuery querySelect, SQLQuery queryCount, int page, int numPerPage) throws PersistanceException
{
PaginatedList<T> pList = new PaginatedList<T>();
try {
int offset = 0;
if (numPerPage > -1) {
offset = page * numPerPage;
}
int totalAllPages = ((BigDecimal) queryCount.uniqueResult()).intValue();
querySelect.setMaxResults(numPerPage);
querySelect.setFirstResult(offset);
List<T> listAll = (List<T>) querySelect.addEntity(referenceClass).list();
pList.setItems(listAll);
pList.setPage(page);
pList.setPageSize(numPerPage);
pList.setTotal(totalAllPages);
} catch (HibernateException e) {
throw new PersistanceException(e);
}
return pList;
}

Voici le Concentrateur de champs d'objet :

private String name;
private String supervisionName;
private String internalAddress;
private boolean activeAlarms;
private int im;
private int id;
private int iw;
private int link;
private Date lastUpdate;
private Type type;
private Department department;
Essayez d'utiliser pleinement qualifié noms de colonne (par exemple,c.ID) dans le order by clause.
dans le order by donner le nom de la table im,id,lien,iw
Dans votre clause order by, il y a un certain nombre de qualifiés colonnes (im, id, lien, iw). L'une de ces noms de colonne sur plus d'une seule des tables jointes? Un coup d'œil, id semble probable.
Montrez votre Java morceau de code,ce code n'est pas adapté pour le cadrage de la réponse!

OriginalL'auteur Flash_Back | 2014-06-23