Maison  >  Article  >  La requête obtient une erreur de syntaxe même si la requête est effectivement correcte

La requête obtient une erreur de syntaxe même si la requête est effectivement correcte

PHPz
PHPzavant
2024-02-22 13:16:13846parcourir

L'éditeur PHP Youzi vous aidera à résoudre les problèmes courants de programmation Java ! Parfois, même si l'instruction de requête est correcte, il peut y avoir des erreurs de syntaxe, ce qui déroute de nombreux débutants. Cet article abordera ce problème pour aider les lecteurs à comprendre en profondeur les erreurs courantes dans la programmation Java et à résoudre le défi des erreurs grammaticales dans les instructions de requête.

Contenu de la question

Je prévois de déployer mon fichier d'oreille sur glassfish, mais lorsque j'essaie de déployer ear, j'obtiens :

Une erreur de syntaxe s'est produite lorsque

2023-11-23t10:46:59.388+0100|严重:调用类 org.glassfish.persistence.jpa.jpadeployer 准备方法时出现异常 2023-11-23t10:46:59.389+0100|严重:调用类时出现异常org.glassfish.javaee.full.deployment.eardeployer 准备方法 2023-11-23t10:46:59.389+0100|严重:准备应用程序时出现异常 2023-11-23t10:46:59.389+0100|严重:异常 [eclipselink- 8025](eclipse 持久性服务 - 2.3.2.v20111125-r10461):org.eclipse.persistence.exceptions.jpqlexception 异常描述:解析查询

La requête est une requête nommée, je l'ai également testée en utilisant Eclipselink dans un autre projet n'utilisant pas Glassfish (elle n'a pas été déployée sur le serveur d'application) et elle a bien fonctionné

;

Je n'arrive pas à comprendre ce qui pourrait mal se passer, si la requête s'exécute correctement en l'utilisant directement, pourquoi ne fonctionne-t-elle pas lorsqu'elle est déployée sur glassfish ?

Il s'agit d'une requête nommée

@Entity
@Table(name = "T_EXE_PROC")
@TableGenerator(name = "ExecuProcGenerator", table = "T_SEQ", pkColumnName = "SEQ_COL", valueColumnName = "SEQ_CONTATOR", pkColumnValue = "EXE_PRO_SEQUE", allocationSize = 10, initialValue = 0)
@NamedQueries({ 

        @NamedQuery(name = "ExeProc.findLastExecProcs", query = "SELECT DISTINCT (e.procedure) FROM ExeProc e WHERE e.cdExecProcs IN ( SELECT DISTINCT (e.cdExecProcs) FROM ExeProc e, ExeStep s where s.ExecProc.cdExecProcs = e.cdExecProcs AND s.stat.cdStation=:cdStation and s.oper.ceLogin=:ceLogin) and e.statusExecProc = :statusExecProc and e.procedure.status = 1 order by e.lastModifiedStepTime DESC"),

        })
public class ExeProc implements Serializable {
    
    private static final long serialVersionUID = 12348979846545312L;
    
    
    public static final String FIND_LAST_EXEC_PROC = "ExeProc.findLastExecProcs";

J'ai utilisé cette requête dans une application Java (un simple projet Java) et cela fonctionne bien ; La base de données est mssql

Solution

Le problème est lié à la version glassfish, dans cette version

Ça fonctionne bien, et dans celui-ci :

ne fonctionne pas, autrement dit, la version open source ne peut pas effectuer de requêtes très complexes (comme celle de l'exemple

) ;

Je sais qu'il n'y a probablement personne d'autre sur la planète qui a les problèmes que je rencontre et que la technologie est très ancienne ; mais je ne comprends pas pourquoi quelqu'un m'a pris mes deux cents ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer