私は、T-SQLで次のSQLクエリを持っている:JPA - データベース機能の選択方法
SELECT a.ReportDate,
a.Value,
a.Quantity,
a.ID,
a.Code
FROM AQF.fCalc(@data) a
@data
はvarbinary
です。 JPAを使用してこのクエリを複製しようとしています。 (私は実際に春データJPA 1.10.2を使用しています。)私はMyRepository
に次のように定義されている次のように
@Query("SELECT a "
+ "FROM function('AQF.fCalc', :data) a "
)
List<MyClass> getCalcData(@Param("data") byte[] data);
MyClass
は次のとおりです。
@Entity
@Data // using lombok to create setters, getters, etc.
public class MyClass {
@Id
private Long id;
private Date reportDate;
private BigDecimal value;
private BigDecimal quantity;
private String code;
}
私はgetCalcDataを呼び出すと、私は次のことを受け取りますエラー:
antlr.NoViableAltException: unexpected token: function
at org.hibernate.hql.internal.antlr.HqlBaseParser.fromRange(HqlBaseParser.java:1501) [hibernate-core-5.0.9.Final.jar:5.0.9.Final]...
どのように私はJPAを使用して関数を呼び出しAQF.fCalc(とバイト配列を渡す)ことができますか?
アップデート1
私は今、あまりにもネイティブクエリを使用して試してみたが、今私は、エラーを知らせるを得る:
java.sql.SQLException: An error occurred while getting new row from user defined Table Valued Function :
System.Xml.XmlException: Unexpected end of file has occurred. The following elements are not closed: Data, Report. Line 24, position 804.
ここMyRepository
でネイティブクエリのテストコードです:
@Query(value = "SELECT a.code "
+ "FROM AQF.fCalc(?1) a",
nativeQuery = true)
List<String> getCalcData(byte[] data);
アップデート2
上記の「アップデート1」に記載されているエラーを解決できました。 getCalcData
のデータのバイト配列が破損していました。その問題を解決すると、エラーは表示されなくなりました。だから、今はネイティブクエリとして実行できます。しかし、私はまだJPQLを使ってこの関数を呼び出す方法を知りたいです。
はそうネイティブクエリhttp://docs.spring.io/spring-data/jpa/docs/current/reference/html/#_native_queries –
OKとしてそれを指定してみてください。コメントありがとう。私はこの記事を参照しました:私はおそらく何かを誤解しているでしょうが、JPQLはJPA 2.1以降のこの構文をサポートしているようです(http://stackoverflow.com/questions/31115100/jpa-query-using-a -d-db-function-to-a-specific-index)を使用します。とにかく、ネイティブクエリを使用するように変更しましたが、今はエラーが表示されませんが、結果が返されません。 – James
申し訳ありませんが、結果が出ないという問題が見つかりました。さて、私は上記の更新された投稿に記載されているエラーを取得します。 – James