Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.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

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
如何调用SQL函数,如;小时();在Java持久化中的@NamedQuery中_Java_Jpa_Named Query - Fatal编程技术网

如何调用SQL函数,如;小时();在Java持久化中的@NamedQuery中

如何调用SQL函数,如;小时();在Java持久化中的@NamedQuery中,java,jpa,named-query,Java,Jpa,Named Query,我需要知道如何在Java持久化中调用@NamedQuery中的SQL函数,如HOUR()。 为了简化,在一个有starttime(TIMESTAMP)列的表中,我需要获取startime介于CURRENT\u TIMESTAMP和HOUR(CURRENT\u TIMESTAMP)+1之间的行。我在谷歌上花了一天时间,仍然没有找到答案 以下查询在使用JAVADB尝试时有效,但在@NamedQuery中同样失败 Java DB实例: select e.EMPLOYEEID, e.FIRSTN

我需要知道如何在Java持久化中调用
@NamedQuery
中的
SQL
函数,如
HOUR()

为了简化,在一个有starttime(
TIMESTAMP
)列的表中,我需要获取startime介于
CURRENT\u TIMESTAMP
HOUR(CURRENT\u TIMESTAMP)+1
之间的行。我在谷歌上花了一天时间,仍然没有找到答案

以下查询在使用
JAVADB
尝试时有效,但在
@NamedQuery
中同样失败

Java DB实例

    select e.EMPLOYEEID, e.FIRSTNAME, r.STARTTIME, r.ENDTIME from reservation r, employee e
where e.EMPLOYEEID = r.EMPLOYEEID AND HOUR(r.STARTTIME) = HOUR(CURRENT_TIMESTAMP)
    @NamedQuery(name="reservation.getcurrent",query = "select e.EMPLOYEEID, e.FIRSTNAME,
r.STARTTIME, r.ENDTIME from reservation r, employee e where e.EMPLOYEEID = r.EMPLOYEEID
AND HOUR(r.STARTTIME) = HOUR(CURRENT_TIMESTAMP)")
@NamedQuery

    select e.EMPLOYEEID, e.FIRSTNAME, r.STARTTIME, r.ENDTIME from reservation r, employee e
where e.EMPLOYEEID = r.EMPLOYEEID AND HOUR(r.STARTTIME) = HOUR(CURRENT_TIMESTAMP)
    @NamedQuery(name="reservation.getcurrent",query = "select e.EMPLOYEEID, e.FIRSTNAME,
r.STARTTIME, r.ENDTIME from reservation r, employee e where e.EMPLOYEEID = r.EMPLOYEEID
AND HOUR(r.STARTTIME) = HOUR(CURRENT_TIMESTAMP)")
错误:

[2014-04-22T17:03:00.946+0530] [glassfish 4.0] [SEVERE] [] [javax.enterprise.system.core] [tid: _ThreadID=38 _ThreadName=admin-listener(5)] [timeMillis: 1398166380946] [levelValue: 1000] [[
  Exception while deploying the app [LyndaPortalReservation] : Exception [EclipseLink-28019] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Deployment of PersistenceUnit [LyndaPortalReservationPU] failed. Close all factories for this PersistenceUnit.
Internal Exception: Exception [EclipseLink-0] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Syntax error parsing [select e.EMPLOYEEID, e.FIRSTNAME, r.STARTTIME, r.ENDTIME from reservation r, employee e where e.EMPLOYEEID = r.EMPLOYEEID AND HOUR(r.STARTTIME) = HOUR(CURRENT_TIMESTAMP)]. 
[126, 169] The right expression is not a valid expression.]]
使用


JPA2.1允许在JPQL查询字符串中使用
“函数(funcName,args)”
。使用它,并将funcName设置为“HOUR”(或任何有关DB的名称)。

为了清晰起见,我添加了在JPQL中声明函数的确切语法@Neil是正确的,但对函数名使用双引号并不起作用。函数名的语法为FUNC('funcName',args)。我们需要使用单引号。因此,对于寻找类似答案的其他用户。下面是确切的语法

@NamedQuery(name=“reservation.getall”,query=“选择e.employeeid,e.firstname,r.starttime,r.endtime from reservation r,employeeid=r.employeeid,FUNC('HOUR',r.starttime)=FUNC('HOUR',CURRENT_TIMESTAMP)”)


这有助于解决我最初在HQL中使用函数的问题

我正在寻找满足@NamedQuery语法的SQL查询。我需要从JavaDB获取数据。您的建议是针对日期格式的,对吗?尝试了以下各种形式,我得到了错误:必须指定函数名,statefield e.EMPLOYEEID无法解析为有效类型。FIRSTNAME、STARTTIME、ENDTIME
@NamedQuery(name=“reservation.getcurrent”,query=“从reservation r、EMPLOYEEID中选择e.EMPLOYEEID、e.FIRSTNAME、r.STARTTIME、r.ENDTIME,其中e.EMPLOYEEID=r.EMPLOYEEID和FUNCTION(HOUR、r.STARTTIME)=FUNCTION(HOUR,CURRENT\u TIMESTAMP)”也是如此
函数名必须用引号括起来,因为它是一个字符串。当我添加引号时,会出现“预期”错误。以前发生的任何事情都是一个警告,在应用程序运行时会导致问题。现在,这是一个错误
@NamedQuery(name=“reservation.getcurrent”,query=“从reservation r中选择e.EMPLOYEEID,e.FIRSTNAME,r.STARTTIME,r.ENDTIME,employee e其中e.EMPLOYEEID=r.EMPLOYEEID和“FUNCTION(HOUR,r.STARTTIME)”=“FUNCTION(HOUR,CURRENT\u TIMESTAMP)”)
如果我遗漏了什么,请告诉我。我说函数名需要引号。。。函数(\'HOUR\',args)尼尔,我的错。是的,我尝试过修改语法,我相信这是函数名的一个单引号,但在运行时仍然会出现以下错误。这显然不是标准的JPQL(在其中任何地方都找不到“FUNC”),函数是标准的JPQL。您的JPA提供商似乎还不支持该标准