我一直在尝试使用带有一些参数的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数据库,因为我需要它来进行实际处理。
提前谢谢。
发布于 2016-10-19 15:31:50
最后,我没有设法使查询正常工作。
为了解决这个问题,我在数据库中创建了一些带有查询的存储过程,这样就解决了所有问题,因为@Query注释不必处理嵌套的撇号。
现在的生活很简单,而且还在继续。
再见。
https://stackoverflow.com/questions/39960051
复制相似问题