Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Jpa 在JPQL命名查询中指定注释_Jpa_Eclipselink - Fatal编程技术网

Jpa 在JPQL命名查询中指定注释

Jpa 在JPQL命名查询中指定注释,jpa,eclipselink,Jpa,Eclipselink,我们有一些场景,其中两个应用程序指向相同的oracle数据库/表并执行一些查询。 DB团队建议在SQL中使用注释,以帮助他们确定在运行缓慢的查询中应该联系谁 由于我们使用的是JPA,我不确定如何为JPA转换为本机SQL的JPQL查询定义注释。 如果我们在JPQL中指定注释,那么它就会中断 @NamedQuery(name = Consts.LOOKUP_BY_END_DATE, query = " /* comment */ SELECT b FROM TableB b WHER

我们有一些场景,其中两个应用程序指向相同的oracle数据库/表并执行一些查询。 DB团队建议在SQL中使用注释,以帮助他们确定在运行缓慢的查询中应该联系谁

由于我们使用的是JPA,我不确定如何为JPA转换为本机SQL的JPQL查询定义注释。 如果我们在JPQL中指定注释,那么它就会中断

        @NamedQuery(name = Consts.LOOKUP_BY_END_DATE, query = "
/* comment */ SELECT b FROM TableB b WHERE "
                + " b.id.ObjId=:ObjId AND b.id.persId=:persId and b.recEffEndDayKy=:recEffEndDayKy "),
例外情况:

Exception Description: Syntax error parsing [/* comments */SELECT b FROM TableB b WHERE  b.id.ObjId=:ObjId AND b.id.PersId=:PersId and b.recEffEndDayKy=:recEffEndDayKy ]. 
[0, 157] The query does not start with a valid identifier, has to be either SELECT, UPDATE or DELETE FROM.
    at org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildException(HermesParser.java:155)
    at org.eclipse.persistence.internal.jpa.jpql.HermesParser.validate(HermesParser.java:334)
    at org.eclipse.persistence.internal.jpa.jpql.HermesParser.populateQueryImp(HermesParser.java:278)
    at org.eclipse.persistence.internal.jpa.jpql.HermesParser.buildQuery(HermesParser.java:163)
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:142)
    at org.eclipse.persistence.internal.jpa.JPAQuery.processJPQLQuery(JPAQuery.java:223)
    at org.eclipse.persistence.internal.jpa.JPAQuery.prepare(JPAQuery.java:184)
    at org.eclipse.persistence.queries.DatabaseQuery.prepareInternal(DatabaseQuery.java:624)
    at org.eclipse.persistence.internal.sessions.AbstractSession.processJPAQuery(AbstractSession.java:4366)
    at org.eclipse.persistence.internal.sessions.AbstractSession.processJPAQueries(AbstractSession.java:4326)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:598)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.postConnectDatasource(DatabaseSessionImpl.java:818)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:762)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:265)
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:731)
    ... 33 more

我相信您已经将接受SQL的本机查询与命名的JPQL查询混淆了。JPQL不支持注释。如果要控制查询,必须使用SQL或本机EclipseLink功能。请参阅此处描述的“SQL”函数

我相信您已经将接受SQL的本机查询与命名的JPQL查询混淆了。JPQL不支持注释。如果要控制查询,必须使用SQL或本机EclipseLink功能。请参阅此处描述的“SQL”函数

Nopes,我不会与本机SQL查询混淆:)这就是我在主题和解释JPA生成的查询中明确提到的原因请查看链接,因为向生成的SQL添加内容的唯一方法是通过EclipseLink提供的“SQL”关键字。Nopes,我不会与原生SQL查询混淆:)这就是我在主题和解释JPA生成的查询中明确提到的原因请查看链接,因为向生成的SQL添加内容的唯一方法是通过EclipseLink提供的“SQL”关键字。JPQL BNF非常清楚,没有“注释”的概念。我不知道“JPA生成的查询”是什么。。。JPA不生成查询,用户生成。当您在JPQL中编写命名查询时,这不是针对DB运行的查询。JPA将JPQL转换为本机SQL并在DB上运行。当我们在实体管理器上调用persist/merge/remove时,它实际上会生成在目标数据库上运行的INSERT/UPDATE/DELETE查询。。。在JPQL中不能有注释。这是非法的语法。所以它不会转换成SQL。消息告诉你。。。您的查询(JPQL)必须以有效的关键字(SELECT)开头!JPQL BNF非常清楚,不存在这样的“评论”概念。我不知道“JPA生成的查询”是什么。。。JPA不生成查询,用户生成。当您在JPQL中编写命名查询时,这不是针对DB运行的查询。JPA将JPQL转换为本机SQL并在DB上运行。当我们在实体管理器上调用persist/merge/remove时,它实际上会生成在目标数据库上运行的INSERT/UPDATE/DELETE查询。。。在JPQL中不能有注释。这是非法的语法。所以它不会转换成SQL。消息告诉你。。。您的查询(JPQL)必须以有效的关键字(SELECT)开头!