Java jpa如何实现模式独立性
我是jpa和hibernate的初学者,我了解jpa如何实现数据库独立性和持久性提供程序独立性 我偶然发现了这样一句话Java jpa如何实现模式独立性,java,hibernate,jpa,Java,Hibernate,Jpa,我是jpa和hibernate的初学者,我了解jpa如何实现数据库独立性和持久性提供程序独立性 我偶然发现了这样一句话 jpa can achieve schema independence jpa是如何实现这一点的?jpa是一个API,这个API完全从您的数据表示和DDL中抽象出来。此外,它是从API实现中抽象出来的(与直接用于Hibernate不同) 这意味着您可以: 使用不同的JPA实现,如Hibernate或Toplink 使用不同的数据库方言,如Oracle、T-SQL、Postg
jpa can achieve schema independence
jpa是如何实现这一点的?jpa是一个API,这个API完全从您的数据表示和DDL中抽象出来。此外,它是从API实现中抽象出来的(与直接用于Hibernate不同) 这意味着您可以:
- 使用不同的JPA实现,如Hibernate或Toplink
- 使用不同的数据库方言,如Oracle、T-SQL、PostgreSQL
- 实现您自己的JPA实现
- 使用免费的开源数据库进行开发,然后使用Oracle/SQL Server进行生产
- 使用高超音速进行自动测试,因此所有内容都存储在内存中并自动拆除
- 透明地使用其他数据源,如XML
- 没有人选择从Hibernate转到Toplink
- 很少有人为一个项目实现JPA
- 很少有人会快速切换数据库后端,因为每个数据库的性能都非常不同
- 此外,不同的方言也能驱赶奇怪的虫子
可爱的API抽象的另一个“反面”是,实现可能过于约束,导致生成的SQL非常低效。这最终导致开发人员不得不添加本机SQL。模式独立性可以通过与DB和提供程序独立性相同的方式实现-可以简单地在配置中更改所有表的模式。您可以通过
persistence unit defaults
更改persistence.xml中包含的orm.xml文件中的默认模式
您也可以通过@Table annotations指定模式。感谢您的精彩解释,但关于模式独立性的问题仍然没有答案?在一个数据库上可以有许多模式。它意味着传统/概念术语中的模式,如“DDL的形状和方言”。JPA使您远离数据存储的特定于SQL的实现。不要把“模式”看作是单个数据库的一部分。你“偶然发现了这个句子”。。。请告诉我们它的位置和含义?如何为另一个模式提供用户名和密码?因为我在@Table注释中使用了schema,它说找不到表。在一个JPA持久化单元中,您总是使用一个用户。不能指定特殊用户来访问架构内的表。您需要为单个用户分配访问所有架构的权限。如果您需要使用两个用户,您可以将您的实体划分为两个不同的持久化单元,但您可以像在两个不同的数据库中一样使用它们,这意味着您必须使用不同的实体管理器,当然,在单独的事务中使用它们,除非您将事务作为XA事务绑定在一起。