質問

誰もが、特にHibernateで、Javaでデータベースに依存しないアプリケーションを作成すると同時に、OracleおよびPostgresのデータベースをターゲットにして任意の経験を持っていますか?

特に私は、Oracle SpatialとPostGISので探しています。 私たちは、Oracle SpatialとPostGISの両方のバックエンドで使用できるJavaベースのSOAを作成したいです。 私はこれらの両方のデータベースで、決して両方を標的とする意図で休止状態を使用しました。 私は、同じコードが使用されるデータベースに応じて異なる結果を生成することができるシナリオを作成することができます。

これは多分、Hibernateはこれを扱うことができるが、任意の既知の問題がある場合、聞いていいだろう。

ケン

役に立ちましたか?

解決

休止状態と一緒に私は、MySQLやOracleとPostgreをサポート延長を休止状態空間をお勧めすることができますそれぞれのGIS拡張子ます。

私が遭遇したいくつかの落とし穴ます:

方言の設定を正しく行うことは容易ではありませんでした、注意してください。それは私に起こったよう方言は、すべての文用に再構成されていないことを確認してください。

あなたが休止状態の特定のバージョン番号

上でロックされてしまうかもしれません使用hibernatespatialからの機能に応じて、

あなたが唯一の基準APIを使用することができ、HQLは直接サポートされていません。

hibernatespatialを使用して私のコードは次のようになります:

  if (query.getMaxDistance() != null && query.getCenter() != null) {
        basicCriteria.add(SpatialRestrictions.within("coordinate", GeoidCircleFactory.circle(query.getCenter(), query.getMaxDistance())));
    }

あなたはかなり悲惨な制約たPostGISの一部に苦しむだろうと他の人が下にあります。 私はあなたのアプリケーションのいくつかは、より良いあなたのDBの可能性をフィットする必要がリラックスすることをお勧めします。例えば、「角度空間」内のクエリは、「ユークリッド空間」に比べてやる方がはるかに簡単です。

GeoidCircleFactoryに含まれるコードは...かなり怖いになります。)

他のヒント

休止状態の方言を使用するだけで、あなたは、作成できるようになります LiquiBaseをのようなデータベースの作成管理ツールをお勧めしますコードは異なるデータベースの特定の構文から抽象化される。

その<のhref =「http://docs.jboss.org/hibernate/stable/core/reference/en/html/session-configuration.html#configuration-optional-dialects」のrelを使用して、異なるデータベースをターゲットハンドルを休止= "nofollowをnoreferrer">方言を抽象化。あなたは、アプリケーション自体の各データベースの唯一の休止状態の設定を変更する必要はありません。

あなたはどちらかあなたの設定でデータベースを使用するか、Hibernateは適切な方言を決定するために、JDBCドライバの設定を使用できるようにする方言を指定することができます。

コメント受け取った後、あなたは空間に休止状態見てきましたか?必要なHibernateの種類や方言を提供することにより地理データをサポートするために休止状態への拡張である。

scroll top