使用OpenQuery和参数的NativeQuery

时间:2016-10-10 13:58:54

标签: java hibernate spring-mvc openquery nativequery

我一直在尝试使用带有一些参数的dblink创建查询。 我正在使用Hibernate 4,数据库是MSSQL。

但我得到:

com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '@P0'.

如果我的查询是

@Query(nativeQuery=true, value="SELECT * FROM OPENQUERY([linked_server], 'SELECT * FROM TABLE WHERE COLUM1 = ''0145A'' AND COLUMN2 LIKE ':prefix'' );")
    public List<CPNT023_PART> GET_PART_AND_ANALYST(@Param(value="prefix") String prefix);

或者我得到了

java.lang.IllegalArgumentException: Parameter with that position [1] did not exist

如果查询是

@Query(nativeQuery=true, value="SELECT * FROM OPENQUERY([linked_server], 'SELECT * FROM TABLE WHERE COLUM1 = ''0145A'' AND COLUMN2 LIKE '':prefix'' ' );")
public List<CPNT023_PART> GET_PART_AND_ANALYST(@Param(value="prefix") String prefix);

(注意LIKE后单引号的差异)。

如果我不使用任何参数,我会得到正确答案。所以这个查询:

@Query(nativeQuery=true, value="SELECT * FROM OPENQUERY([linked_server], 'SELECT * FROM TABLE WHERE COLUM1 = ''0145A'' AND COLUMN2 LIKE ''%ABC%'' ' );")

实际上有效。

我有点迷失在这个问题上,我一直在努力寻找答案,但却无法接近有效的答案。

我必须使用OPENQUERY,因为链接服务器是一个庞大的Oracle数据库,因为我需要它来进行实际处理。

提前致谢。

1 个答案:

答案 0 :(得分:0)

最后,我没有设法使查询正常工作。

为了解决这个问题,我使用查询在数据库中创建了一些存储过程并解决了所有问题,因为@Query注释不必处理嵌套的撇号。

生活现在很容易,并且一直在继续。

再见。