Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate和SQL可移植性_Java_Sql_Jdbc_Portability_Tightly Coupled Code - Fatal编程技术网

Java Hibernate和SQL可移植性

Java Hibernate和SQL可移植性,java,sql,jdbc,portability,tightly-coupled-code,Java,Sql,Jdbc,Portability,Tightly Coupled Code,我是新来的,我正在读《职业JPA2》。我读到Java和JDBC包的问题是 SQL是不可移植的 Java代码和SQL之间的紧密耦合 JDBC的讽刺之处在于,尽管编程接口 可移植的,SQL语言不是。尽管多次尝试 如果将其标准化,那么编写任何复杂程度的SQL仍然很少见 将在两个主要的数据库平台上保持不变地运行。即使SQL 方言是相似的,每个数据库根据不同的语言执行不同的操作 查询的结构,需要特定于供应商的调整 大多数情况下 我的问题是: 与SQL可移植性相关的问题是否仍然如此关键 据我所知,Hiber

我是新来的,我正在读《职业JPA2》。我读到Java和JDBC包的问题是

  • SQL是不可移植的
  • Java代码和SQL之间的紧密耦合
  • JDBC的讽刺之处在于,尽管编程接口 可移植的,SQL语言不是。尽管多次尝试 如果将其标准化,那么编写任何复杂程度的SQL仍然很少见 将在两个主要的数据库平台上保持不变地运行。即使SQL 方言是相似的,每个数据库根据不同的语言执行不同的操作 查询的结构,需要特定于供应商的调整 大多数情况下

    我的问题是:

  • 与SQL可移植性相关的问题是否仍然如此关键
  • 据我所知,Hibernate、TopLink和其他框架还必须从元数据(注释)创建SQL查询。他们如何安排与SQL可移植性相关的问题
  • Java和JDBC紧密耦合意味着开发人员必须编写SQL查询。我理解正确吗
  • (提前感谢您的回复)

  • 是的,问题在于SQL和代码之间的紧密耦合,这对项目非常关键,因为如果我们需要在没有ORM的情况下从一个数据库迁移到另一个数据库,我们需要更改应用程序中的所有查询

  • Hibernate、TopLink和其他ORM解决方案将您的java代码转换为SQL查询并将其发送到数据库,但它们更标准且经过良好测试,因此我们可以依靠ORM工具将代码转换为查询,并将我们从复杂性中抽象出来,而不是直接处理查询。因此,最好使用ORM工具,而不是直接编写查询

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


  • 如果您需要切换到不同的数据库,SQL可移植性将是一个问题

    人们很容易认为你永远不会转换,但这可能代价高昂。我参与过一些项目,这些项目假设数据库总是供应商x,但后来也需要供应商y数据库。要使应用程序与两个数据库一起工作,需要进行大量痛苦、乏味的返工

    我建议您始终使用标准SQL和/或使用只编写标准SQL的ORM工具

    我的ORM总是创建标准SQL。如果您已经使用sormula开发了一个应用程序,那么切换数据库所需的全部工作就是更改jdbcjar