jpa如何实现模式独立性

时间:2015-09-07 15:07:58

标签: java hibernate jpa

我是jpa和hibernate的初学者,我理解jpa如何实现数据库独立性和持久性提供者独立性。

我遇到了陈述

的句子
{{1}}

jpa如何实现这一目标?

2 个答案:

答案 0 :(得分:0)

JPA是一个API,这个API完全从您的数据表示和DDL中抽象出来。此外,它是从API实现中抽象出来的(与直接用于Hibernate不同)。

这意味着你可以:

  • 使用不同的JPA实现,例如Hibernate或Toplink
  • 使用不同的DB方言,例如Oracle,T-SQL,PostgreSQL
  • 实施您自己的JPA实施

这些可以通过注释 AND / OR 配置来完成。因此理论上,您可以从Oracle切换到PostgreSQL,而无需重新编译应用程序。

这也意味着你可以做其他时髦的事情:

  • 使用免费的开源数据库进行开发,然后使用Oracle / SQL Server进行生产
  • 使用Hypersonic进行自动测试,因此一切都在内存中并自动拆除。
  • 透明地使用其他数据源,如XML。

您可以获得开箱即用的SQL注入保护等其他细节,非常快速的启动时间(而不是必须对所有内容进行两次编码),当您定义了实体等时自动生成DDL,这样可以更快地启动小项目比传统的路线。

现实:

  • 没有人选择从Hibernate转到Toplink
  • 很少有人为项目实施JPA
  • 很少有人快速切换数据库后端,因为每个数据库的执行方式都不同
  • 此外,不同的方言可以驱除奇怪的错误。

配置方面和使用像Hypersonic这样的东西的能力虽然很有用。

另一个"翻转面"对于可爱的API抽象是实现可能过于约束,导致生成非常低效的SQL。最终,开发人员必须添加本机SQL。

答案 1 :(得分:0)

模式独立性可以与DB和提供者独立性相同的方式实现 - 可以简单地在配置中更改所有表的模式。您可以通过persistence-unit-defaults更改persistence.xml中包含的orm.xml文件中的默认架构。

您也可以通过@Table注释指定架构。