Erreur Column 'row_id' in where clause is ambiguous

Bonjour,

Sur une instance 4.0 , j’ai une erreur (Column ‘row_id’ in where clause is ambiguous - Cf ci-dessous) qui survient à l’enregistrement de mon objet TrackinDemand. J’ai l’impression que cette erreur est apparue avec la dernière mise à jour car je n’ai pas eu le problème avant. Pour moi c’est une requête générée par le socle donc j’en ai déduit que mon paramétrage doit poser problème. Toutefois je ne sais pas dans quelle direction mener mes recherches,
Si vous avez des pistes à m’apporter je suis preneuse. Merci d’avance.

Version :

Simplicité® version 4.0.P12, built on 2018-03-12 16:45 (revision 4fd20b7b8f9fbd32a2a3bc006d0a76d736a883a3) for tomcat 8, encoding UTF-8 (system encoding UTF-8)

Stracktrace :
2018-03-22 14:52:07,019 ERROR [com.simplicite.util.engine.ObjectManager] SIMPLICITE|http://partenor.simplicite.io:10328||ECOREDB001|system|com.simplicite.util.engine.ObjectManager|query||Erreur SQL requête: jdbc/simplicite: select count(*) from tracking_demand t left outer join tracking_demand t_demDemandId on (t.dem_demand_id=t_demDemandId.row_id) inner join tracking_project t_demPrjDetectId on (t.dem_prj_detect_id=t_demPrjDetectId.row_id) left outer join tracking_sous_projet t_demSousProjetId on (t.dem_sous_projet_id=t_demSousProjetId.row_id) left outer join tracking_client t_prjCliId on (t_demPrjDetectId.prj_cli_id=t_prjCliId.row_id) inner join tracking_version t_demVrsDetectId on (t.dem_vrs_detect_id=t_demVrsDetectId.row_id) left outer join tracking_project t_vrsPrjId on (t_demVrsDetectId.vrs_prj_id=t_vrsPrjId.row_id) left outer join tracking_prj_usr t_demPrjUsrDetectId on (t.dem_detect_usr_id=t_demPrjUsrDetectId.row_id) left outer join m_user t_demPrjUsrDetectId_prjusrUsrId on (t_demPrjUsrDetectId.prjusr_usr_id=t_demPrjUsrDetectId_prjusrUsrId.row_id) left outer join tracking_prj_usr t_demPrjUsrChefProId on (t.dem_chefproj_usr_id=t_demPrjUsrChefProId.row_id) left outer join m_user t_demPrjUsrChefProId_prjusrUsrId on (t_demPrjUsrChefProId.prjusr_usr_id=t_demPrjUsrChefProId_prjusrUsrId.row_id) left outer join tracking_prj_usr t_demPrjUsrDvpId on (t.dem_dvp_usr_id=t_demPrjUsrDvpId.row_id) left outer join m_user t_demPrjUsrDvpId_prjusrUsrId on (t_demPrjUsrDvpId.prjusr_usr_id=t_demPrjUsrDvpId_prjusrUsrId.row_id) left outer join tracking_prj_usr t_demPrjUsrTestId on (t.dem_test_usr_id=t_demPrjUsrTestId.row_id) left outer join m_user t_demPrjUsrTestId_prjusrUsrId on (t_demPrjUsrTestId.prjusr_usr_id=t_demPrjUsrTestId_prjusrUsrId.row_id) left outer join tracking_prj_usr t_demPrjUsrChiffId on (t.dem_chiff_usr_id=t_demPrjUsrChiffId.row_id) left outer join m_user t_demPrjUsrChiffId_prjusrUsrId on (t_demPrjUsrChiffId.prjusr_usr_id=t_demPrjUsrChiffId_prjusrUsrId.row_id) left outer join tracking_version t_demVrsDvpId on (t.dem_vrs_dvp_id=t_demVrsDvpId.row_id) where row_id=410 and t.dem_prj_detect_id=49
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column ‘row_id’ in where clause is ambiguous
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.Util.getInstance(Util.java:408)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2484)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1966)
at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:82)
at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:82)
at com.simplicite.util.engine.DBAccess.query(DBAccess.java:660)
at com.simplicite.util.engine.DBAccess.query(DBAccess.java:509)
at com.simplicite.util.engine.DBAccess.simpleQuery(DBAccess.java:858)
at com.simplicite.util.engine.DBAccess.simpleQuery(DBAccess.java:834)
at com.simplicite.util.engine.ObjectManager.fkExists(ObjectManager.java:1234)
at com.simplicite.util.engine.ObjectManager.update(ObjectManager.java:1894)
at com.simplicite.util.engine.ObjectManager.save(ObjectManager.java:2491)
at com.simplicite.util.ObjectDirect.save(ObjectDirect.java:424)
at com.simplicite.util.ObjectDB.save(ObjectDB.java:885)
at com.simplicite.webapp.ObjectForm.validateAndSave(ObjectForm.java:1801)
at com.simplicite.webapp.ObjectForm.display(ObjectForm.java:201)
at com.simplicite.webapp.ObjectForm.display(ObjectForm.java:74)
at com.simplicite.util.ObjectDB.displayForm(ObjectDB.java:2205)
at com.simplicite.util.ScriptedObjectDB.displayForm(ScriptedObjectDB.java:1937)
at com.simplicite.webapp.servlets.ui.BusinessObjectServlet.service(BusinessObjectServlet.java:165)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.simplicite.webapp.filters.AuthMethodFilter.doFilter(AuthMethodFilter.java:108)
at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)
at com.simplicite.tomcat.valves.APISessionValve.invoke(Unknown Source)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)

il devrait en effet y avoir t.row_id dans le where.
si c’était le socle tous les “count” du socle ne fonctionnerait pas, ça doit se produire dans un cas précis à éclaircir.

  • A quel moment ça s’affiche ?
  • Avez vous des filtres ou une search spec sur cet objet qui positionne le “row_id” ?
  • Votre version 4.0 est à jour ? vous êtes sur UI responsive ?

D’après la stack-trace ça vient de la vérification de l’existence d’une FK avec LinkDataMap au moment du save.
Ce contrôle est assez récent et dans un cas aussi complexe de jointure il doit effectivement manquer qq chose.
je regarde

J’ai poussé sur le master une correctif, j’espère que ça solutionnera votre pb demain.

Merci de votre retour. Voici plus de précision suite à vos questions:

  • En effet l’erreur survient lorsque j’enregistre mon objet (dès qu’on fait un save).
  • J’avais vérifié, je n’ai pas filtres ni de searchspec qui positionne le row_id d’où ma déduction que c’était du socle.
  • L’erreur survient sur l’UI responsive (et desktop d’ailleurs aussi)
  • Mon instance est en auto upgrade. Le dernier build date du 12/03.
  • En effet j’ai des mappings de relation sur cet objet.

Pour info ma requête a 2 filtres dans le where:

  • le premier (qui pose problème) semble être un id de TrackingVersion (champ dem_vrs_detect_id dans trackingDemand)
  • le deuxième (correct) correspond bien à l’id du projet

Merci pour le correctif, je teste dès demain.

Notre instance n’est pas branchée sur le master, donc je vais attendre que ça passe sur la branche release (notre dernière maj date du 12/03) pour vous faire un retour.

Votre serveur est “partenor” ? Si oui je peux faire en sorte que vous ayez à disposition à la fois la 4.0 master et la 4.0 release (par contre une instance créé sur une branche reste sur cette branche)

Bonjour, En effet mon serveur est partenor.

OK on va y ajouter la version 4.0 master (elle s’appellera “4.0”) en plus de la version 4.0 release (qui sera renommée en “4.0r”)

Vous pourrez alors créer des instances 4.0 soit master soit release (mais comme je l’ai dit c’est un choix définitif pour l’instance considérée même si en théorie il est sans doute possible de passer une instance de release à master via un processus manuel mais bien évidemment pas l’inverse)

Done:

[simplicite@partenor ~]$ sim versions
3.0  2018-03-22 00:28:57
3.1  2018-03-21 17:24:46
3.2  2018-03-21 17:34:18
4.0  2018-03-22 21:33:09
4.0r 2018-03-12 16:49:52

Bonjour,

J’ai bien reçu le correctif (4.0.P13Built on2018-03-23 13:41 (revision 1f05c9635a1121ce616c6b387e4ba4d6c509cc02)).

Je n’ai plus l’erreur sur le row_id dans les logs mais j’ai dorénavant un autre problème qui bloque les enregistrements.
A l’enregistrement d’une demande, j’ai un message d’erreur:

L’objet référencé n’existe plus: Version

Pourtant quand je clique à coté de ma version pour ouvrir l’objet lié il me l’ouvre bien.
Je n’ai rien vu de particulier dans les logs même en activant le SQL.

J’aurai aimé essayer de reproduire sur mon environnement de formation mais je n’arrive pas à créer de mapping de relation:

Champ obligatoire: Fils

Je ne sais pas quelle information de plus vous donner, en tout cas tous les enregistrements sur mon objet Demande sont bloqués.

Il faut désactiver le linkmap qui doit bloquer au niveau du controle le temps qu’on arrive à reproduire le cas.
Si vous avez pu récupérer la requete SQL (select count de la référence qui posait pb la dernière fois), on pourra voir pourquoi elle ne ramène rien.

Bonjour François,
Je n’ai vu aucune requête Count portant sur mon objet Version.
La seule requête sur cette table (en tant que table principale) est un select avec tous les champs et cela me retourne bien ma version.

select t.row_id, t.vrs_prj_id, t_vrsPrjId.prj_code, t_vrsPrjId.prj_label, t.vrs_number, t.vrs_label, t_vrsPrjId.prj_cli_id, t_prjCliId.cli_code, t.vrs_chiffrage, t.vrs_bl_recette, t.vrs_bv_recette, t.vrs_bl_prod, t.vrs_bv_prod, t.vrs_EB, t.vrs_date, t.vrs_date_prod, t.vrs_statut, t.vrs_comments, t.vrs_date_validation, t.vrs_date_go, null, t.created_dt, t.created_by, t.updated_dt, t.updated_by from tracking_version t inner join tracking_project t_vrsPrjId on (t.vrs_prj_id=t_vrsPrjId.row_id) left outer join tracking_client t_prjCliId on (t_vrsPrjId.prj_cli_id=t_prjCliId.row_id) where (t.row_id=? ) and (1=1) order by t_vrsPrjId.prj_code asc, t.vrs_number desc, t.row_id asc Variables=[410]

Sur mon objet Demande j’ai 3 mappings de relation: 2 pour l’objet Version (un pour la version de détection et un pour la version cible) et 1 pour l’objet Project.
Dans les logs j’ai une requête select (retournant tous les champs donc pas un count) sur la Version et sur le Projet. Toutes les 2 me retournent quelque chose.

J’ai bien des count dans les logs mais sur d’autres objets liés à la Demande (Demande parente, document attachés, historique demande).

Le problème se situait sur le count de votre TrackinDemand :

il manquait t.row_id dans le where, c’est donc corrigé si vous ne voyez plus l’erreur.
Il m’est impossible de debugger votre paramétrage, mais ce n’est plus le même problème.

Je pense avoir trouvé le problème, il y a un problème de jointure sur la recherche de link datamap, il faut que le moteur utilise l’alias de la table basée sur le full input du champ (pb d’unicité des input qu’on avait en V3).

C’est compliqué à expliquer mais on va corriger.

1 Like