2016-10-10 12 views
0

私はtriyngを使用して、いくつかのパラメータを持つdblinkを使用してクエリを作成しました。 私はHibernate 4を使用しています。データベースはMSSQLです。OpenQueryとパラメータを使用したNativeQuery

しかし、私のどちらかが得る:

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); 

であるか、クエリが

@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 

を取得する場合

(LIKE後の一重引用符の違いに注意してください)。

パラメータを使用しない場合は、正しい答えが得られます。したがって、このクエリ:

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

実際に動作します。

私はちょっとこの問題で迷っています。私は答えを探すためにtriyngでしたが、有効なものの近くにはどこもありませんでした。

私は実際の処理を行うために必要なので、リンクサーバーは巨大なOracleデータベースであるため、OPENQUERYを使用する必要があります。

ありがとうございます。

答えて

0

最後に、私はquerysを正しく動作させることができませんでした。

問題を解決するために、クエリーでデータベースにストアドプロシージャをいくつか作成し、@Queryアノテーションはネストされたアポストロフィを処理する必要がないため、すべてを解決しました。

人生は簡単で、続けています。

Bye。

関連する問題