休止/春データJPAは春ブートアプリケーションでWITHINキーワードを識別することができません

IamVenkatReddy:

私は使用しています@Formula私のエンティティ/ POJOクラスのプロパティのいずれかの注釈を。実行時に、結果をフェッチするために、1つのクエリを作成しているし、それはERRORを投げているORA-02000: missing WITHIN keyword、識別することができないようWITHINキーワードとして。

Marks.java

@Formula("(SELECT CASE WHEN dis_order IS NULL THEN (SELECT listagg(qpm.displayed_order,', ') WITHIN GROUP (ORDER BY qpm.displayed_order) FROM que_post_mark qpm WHERE qpm.es_id = es_id AND qpm.sez_id = sez_id GROUP BY qpm.es_id, qpm.sez_id) ELSE NULL END FROM dual)")
private String childItemsDisplayedOrder;

生成されたクエリは、以下のようなものです:

select marks0_.*,
(SELECT
    CASE 
        WHEN marks0_.displayed_order IS NULL THEN (SELECT
            listagg(qpm.displayed_order,
            ', ') marks0_.WITHIN 
        GROUP (ORDER BY
            qpm.displayed_order) 
        FROM
            que_post_mark qpm 
        WHERE
            qpm.es_id  = marks0_.es_id  
            AND qpm.sez_id = marks0_.sez_id 
        GROUP BY
            qpm.es_id ,
            qpm.sez_id) 
        ELSE NULL 
    END 
FROM
    dual) as formula2_0_ 
from
    MARKS marks0_ 
where
    marks0_.es_id =?

これは、識別されたWITHIN列としてなど、エイリアス名を追加しますmarks0_.WITHIN

私は、バージョンの下に使用しています:

 spring-boot-starter-web = 1.4.0.RELEASE, spring-data-jpa:jar:1.10.2 ,hibernate-entitymanager:jar:5.1.3' hibernate-core:jar:5.1.3, hibernate-jpa-2.1-api:jar

私はそれを動作させるために、これらのjarファイルのバージョンを下げることを試みたが、それは動作しませんでした。

エラースタックトレースは以下のようなものです:

Caused by: java.sql.SQLSyntaxErrorException: ORA-02000: missing WITHIN keyword

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1059)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257)
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:587)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:225)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:53)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:774)
    at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:925)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1111)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:4798)
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:4845)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1501)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:56)
    ... 136 common frames omitted

誰も私がこの問題を解決するのに役立つだろうか?

IamVenkatReddy:

で述べたように、私は、Hibernate方言クラスを拡張することによってこの問題を解決してきた。このリンク

public class Oracle10gDialectExtended extends Oracle10gDialect {
    public Oracle10gDialectExtended() {
        super();
        registerKeyword("within"); //Keyword has to be in lowercase.
    }
}

この新しいクラスとセット「hibernate.dialect」プロパティ。

Properties.setProperty("hibernate.dialect", "com.example.Oracle10gDialectExtended");

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=192879&siteId=1