1

2 つのデータベースのネイティブ クエリに名前を付け、EclipseLink でデータベース上で適切なクエリを実行するにはどうすればよいですか?

例を挙げます。Oracle Db と PostgreSQL で実行できるソリューションがあります。ネイティブ クエリを db で実行する必要があります。そのため、Oracle のネイティブ クエリは PostgresSQL のクエリとは異なります。それらを orm.xml に名前付きクエリとして配置し、実行時環境に基づいて各データベースでEclipseLinkに正しいクエリを実行させるにはどうすればよいですか。

データベースごとに代替 orm ファイルが必要ですか? ストアド プロシージャ/db 関数および同様のものは許可されません。だから私はネイティブの帖に名前を付けなければなりませんでした。

4

1 に答える 1

2

JPA 2.1 では、名前付きクエリをfactoryに動的に追加できるため、プラットフォームに基づいて実行時に追加するクエリを指定できます。

ターゲット データベースをコードに渡す場合を除き、プロバイダーからデータベースを取得するには、ネイティブ API または接続を使用してそのメタデータを取得する必要があります。EclipseLink から取得するには、セッションを取得してから getPlatform() を呼び出し、その isOracle と isPostgreSQL を使用して追加するクエリを決定するか、他のプラットフォーム用の汎用クエリを決定する必要があります。何かのようなもの

entityManagerFactory.unwrap(Session.class).getPlatform().isOracle();
于 2016-02-26T18:15:21.903 に答える