0

特にHibernateを使用して、Javaでデータベースに依存しないアプリを作成し、OracleデータベースとPostgresデータベースを同時にターゲットにした経験はありますか?

特に私はOracleSpatialとPostGISを見ています。OracleSpatialとPostGISの両方のバックエンドで使用できるJavaベースのSOAを作成したいと考えています。私はこれらのデータベースの両方でHibernateを使用しましたが、両方をターゲットにするつもりはありませんでした。使用するデータベースに応じて、同じコードで異なる結果が生成されるシナリオを作成できます。

休止状態でこれを処理できる可能性がありますが、既知の問題があるかどうかを聞いてみるとよいでしょう。

ケン

4

3 に答える 3

2

Hibernate とともに、Mysql、Oracle、および Postgre をサポートする拡張機能であるHibernate Spatialと、それぞれの GIS 拡張機能をお勧めします。

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

方言の構成を正しく行うのは簡単ではないことに注意してください。私に起こったように、すべてのステートメントに対して方言が再構成されないようにしてください。

使用する hibernatespatial の機能によっては、特定のバージョン番号の hibernate にロックインされる可能性があります

基準 API のみを使用できます。hql は直接サポートされていません。

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

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

postgis やその他の非常に悲惨な制約のいくつかに苦しむことになります。DB の可能性に合わせてアプリケーションのニーズを緩和することをお勧めします。たとえば、「角度空間」でのクエリは、「ユークリッド空間」でのクエリよりもはるかに簡単です。

GeoidCircleFactory に含まれるコードは非常に恐ろしく見えます... :)

于 2009-08-17T21:00:42.897 に答える
0

Hibernate は、そのDialect抽象化を使用して、さまざまなデータベースのターゲットを処理します。アプリケーション自体に変更を加える必要はありません。各データベースの休止状態の構成のみです。

データベースで使用する方言を構成で指定するか、Hibernate が JDBC ドライバー設定を使用して適切な方言を決定できるようにすることができます。

受け取ったコメントに続いて、Hibernate Spacialをご覧になりましたか? これは、必要な Hibernate の型と方言を提供することで地理データをサポートする Hibernate の拡張機能です。

于 2009-08-17T16:02:57.880 に答える
0

Hibernates 方言を使用することに加えて、作成コードをさまざまなデータベースの特定の構文から抽象化できるようにするLiquibaseのようなデータベース作成管理ツールが必要になります。

于 2009-08-17T16:13:24.897 に答える