EclipseLink 的 COLUMN 和 TABLE 函数是否独立于 DBMS?

Are EclipseLink's COLUMN and TABLE functions DBMS independent?

如果你读过这个 EclipseLink 的 User-/Developer Guide 它没有提到 TABLE 和 COLUMN 函数是否独立于数据库,我不确定考虑到我正在使用一些 oracle、postgres 和 sqlserver 数据库,如果我应该使用它们的话。

问题

这些函数是独立于 DBMS 的吗?

UserGuide 的第一句话给出了一条重要信息:

The Java Persistence Query Language (JPQL) is the query language defined by JPA. JPQL is similar to SQL, but operates on objects, attributes and relationships instead of tables and columns.

也就是严格意义上的JPQL != SQL。 JPQL 是一种查询语言,用于在对象关系映射器的环境中查询对象(ORM). In this context, an ORM abstracts the actual DBMS ("the SQL world"). EclipseLink 完全实现了 JPA 规范文档(版本 1、2.0、2.1、2.2)中定义的标准 JPQL。

此外,EclipseLink

provides many extensions to the standard JPA JPQL. These extensions provide access to additional database features many of which are part of the SQL standard, provide access to native database features and functions, and provide access to EclipseLink specific features. EclipseLink JPQL extensions are referred to as the EclipseLink Query Language (EQL).

这对

意味着什么
  • COLUMN 操作允许在非映射列上查询,并且
  • TABLE 允许在非映射表上查询的操作?

EQL 是 EclipseLink 的基本 ORM 实现的扩展,为您提供查询对象及其相应数据库列的元信息的增强方式。这是针对每个供应商具体实施的 - 取决于配置的 JPA 方言 - 或者尽可能与供应商无关。

本质上,就不同的DBM系统而言,使用这些功能应该是安全的。不过,您将一劳永逸地将您的应用程序绑定到 EclipseLink,使您自己无法切换到不同的 JPA 提供程序,例如Hibernate,以防您想试验或出于性能原因。

希望对您有所帮助。