0

有没有人有使用 Java 创建与数据库无关的应用程序的经验,尤其是使用 Hibernate,并同时针对 Oracle 和 Postgres 数据库?

特别是我正在研究 Oracle Spatial 和 PostGIS。我们想要创建一个基于 Java 的 SOA,它可以与 Oracle Spatial 和 PostGIS 后端一起使用。我已经将 Hibernate 与这两个数据库一起使用,但从未打算同时针对这两个数据库。我可以创建场景,其中相同的代码可以根据使用的数据库生成不同的结果。

也许hibernate可以处理这个问题,但如果有任何已知问题,我会很高兴听到。

4

3 回答 3

2

除了 hibernate,我还可以推荐Hibernate Spatial,这是一个支持 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 和其他一些非常可怕的限制。我建议放宽您的一些应用程序需求,以更好地适应您的数据库的可能性。例如,“角度空间”中的查询比“欧几里得空间”中的查询要容易得多。

GeoidCircleFactory 中包含的代码看起来很吓人...... :)

于 2009-08-17T21:00:42.897 回答
0

Hibernate 使用其方言抽象来处理针对不同数据库的操作。您不需要对应用程序本身进行任何更改,只需更改每个数据库的休眠配置。

您可以在配置中指定要与数据库一起使用的方言,也可以允许 Hibernate 使用 JDBC 驱动程序设置来确定适当的方言。

根据收到的评论,您是否查看过Hibernate Spacial?它是 Hibernate 的扩展,通过提供必要的 Hibernate 类型和方言来支持地理数据。

于 2009-08-17T16:02:57.880 回答
0

除了使用 Hibernates 方言之外,您还需要像Liquibase这样的数据库创建管理工具,它允许将创建代码从不同数据库的特定语法中抽象出来。

于 2009-08-17T16:13:24.897 回答