2016-04-01 20 views
1

Oracle 12cからdeprecation of JPublisherを使用しているため、複雑なオブジェクト型を持つストアドプロシージャを、生成されたクラスおよびJDBCではなくパラメータとして呼び出す方法を検討しています。EclipseLinkを使用して複雑なオブジェクト型パラメータを持つOracleでストアドプロシージャを呼び出す

EclipseLink JPA Extensionsは、それを助けることができる唯一のツールだと思われます。私が見つけた例に続いて、簡単な型を持つ手続きを引数として呼び出すことができます。しかし、オブジェクトがもう少し複雑な場合、データベースのPL/SQLオブジェクト型に正しくマップするように、エンティティ・クラスに注釈を付けることができませんでした。

例えば、我々は型構造は、次のされているのと同じオブジェクトタイプAの1つの入力と1つの出力パラメータを持つストアドプロシージャがあります

オブジェクトタイプAは<含ま - <のテーブルであるテーブル型Bを - <を含むオブジェクトタイプC - <のテーブルであるテーブルタイプD - オブジェクトタイプE.

オブジェクトタイプに@OracleObjectを使用し、テーブルタイプに@PLSQLTableを使用すると考えましたが、見つかりませんでしたそれらを正しく組み合わせる方法。

私は次のことを試してみた:

// All annotations with the required elements 

@Embeddable 
@Struct 
@OracleObject 
public class A { 
    @Column(name = "B") 
    private B b; 

    // Getter and setter 
} 

@Embeddable 
@Struct 
@PLSQLTable (.., nestedType = "C") 
public class B { } 

@Embeddable 
@Struct 
@OracleObject 
public class C {} 

私は、クラスAにおよび/またはクラスCに適切な注釈要素と@PLSQLTableを追加しようとしましたが、JavaとDBオブジェクトがマップされません。お互いに正しく、私は電話中にjava.sql.SQLException: Invalid column typeを取得しています。

誰かがAをオブジェクトというのEclipseLinkを伝えるために注釈を使用する方法を私に説明することができれば、私は非常に感謝はC.

はどうもありがとうございましオブジェクトの表Bが含まれています。

答えて

0

ここに同じ問題があります。私はSpring Data Oracle Extensionプロジェクトの道を進んでいます。しかし、与えられた例は複雑なオブジェクトではなく単純なpojoです。
どこでもサンプルが見つからないにもかかわらず、SqlReturnSqlData()を使用して非常に複雑なオブジェクトを戻すことができましたが、複雑なオブジェクトをOracleストアドプロシージャに挿入する方法が見つからないようです。カスタムの複雑なOracleタイプをどのように挿入するのかの完全な例はまだ見つかっていません。春やその他の方法で

+0

最終的にJDBCを使用することにしました。私は[JDBCガイド](https://docs.oracle.com/database/121/JJDBC/oraoot.htm#JJDBC28461)で説明されているように、SQLDataインタフェースを実装する型クラス用の単純なジェネレータを作成しました。生成されたクラスとともに[OracleCallableStatement](https://docs.oracle.com/database/121/JAJDB/oracle/jdbc/OracleCallableStatement.html)を使用してストアド・プロシージャをコールします。 コレクション型の属性では、SQLDataを実装するJavaクラス内で[OracleArray](https://docs.oracle.com/database/121/JJDBC/oraarr.htm#i1056527)を使用できます。 –

+0

おめでとうございます。自己定義の子オブジェクトを挿入できましたか?たとえば、親Carと子ラジオを使用します。私は親のためのreadSQLメソッド内に次のようにしています:setRadio((Radio)stream.readObject());実行時にコンパイルされても、実行時にキャスト例外がスローされます。 xception:oracle.sql.STRUCTは、ラジオがStructまたはSTRUCTであるかのように、com.foo.beans.Radioにキャストできません。 Docsではこれを行う必要はないと言われていますが、ドキュメントは親子関係の完全な例を提供していないようです。私はあなたが問題なくreadSQLで同じことをやっていると思います。 – Jason

+0

私の問題は、typeMapが子オブジェクトに関連する値を持たないことになりました。Spring Data JDBC Extensionsプロジェクトは、typeMapを簡単に公開することも、タイプマップを子オブジェクトで設定することの例も公開していません。 – Jason

関連する問題