2013-06-22 27 views
0

我是新的持久性,我正在阅读“Pro JPA 2”一书。我读了Java和JDBC包的问题是,休眠和SQL可移植性

  1. SQL是不可移植的
  2. Java代码和SQL之间
  3. 紧耦合

JDBC的具有讽刺意味的是,尽管编程接口是 便携式,SQL语言不是。尽管 进行了许多尝试来标准化,但仍然很少编写任何复杂性的SQL,这些复杂性在两个主要数据库平台上将保持不变。即使在方言类似的情况下,每个数据库的表现也会有所不同,具体取决于查询的结构,因此大多数情况下需要特定于供应商的调整。

我的问题是:

  1. 与SQL便携链接的问题仍是如此关键?
  2. 据我所知,Hibernate,TopLink和其他框架也必须从其元数据(注释)中创建SQL查询。他们如何安排与SQL可移植性相关的问题?
  3. Java & JDBC紧耦合意味着开发人员必须编写SQL查询。我理解正确吗?

预先感谢您的答复)

回答

1
  1. 是该问题与SQL和代码之间的紧耦合,是非常关键的,因为项目如果我们需要从一个数据库迁移到其他没有ORM ,我们需要更改应用程序中的所有查询。 Hibernate,TopLink和其他ORM解决方案将您的Java代码转换为SQL查询并将它们激发到数据库,但它们更加标准和经过良好测试,因此不是直接在查询上工作,我们可以依靠ORM工具进行转换我们的代码进入查询并从复杂性中抽象出我们。因此,使用ORM工具而不是直接编写查询是个好主意。

  2. 是的,Java & JDBC紧耦合意味着开发人员必须直接编写不具有可移植性的SQL查询,并且在数据库层发生更改时,您需要更改所有查询。相反,如果使用ORM解决方案,只需更改一些XML或配置文件即可直接迁移到ORM支持的任何数据库。

1

如果您需要切换到不同的数据库,SQL可移植性将成为问题。

很容易认为你永远不会切换,但这可能是昂贵的。我一直在假设数据库始终是供应商x的项目,但后来也需要供应商y数据库。需要进行许多痛苦,乏味和重复的工作才能使这两个数据库的应用程序工作。

我建议您始终使用标准SQL和/或使用仅写入标准SQL的ORM工具。

我的ORM,sormula始终创建标准SQL。如果您使用sormula开发了一个应用程序,那么切换数据库所需的一切就是更改jdbc jar。