EJB 查询与 SQL 的兼容性问题
因为 Enterprise JavaBeans (EJB) 查询编译为结构化查询语言 (SQL),所以您必须知道 Java 语言和 SQL 之间的兼容性问题。
两种语言在以下方面不同,对于改正 EJB 查询公式,这些方面可能是很关键的:
- SQL 字符串的比较语义与 Java 语言的那些比较语义不完全匹配。 例如:
A
(字母 A)和A
(字母 A 加一个空格)在 SQL 中被视为相等,但在 Java 语言中则不然。 - 比较和整理顺序取决于底层数据库。 例如,如果您在使用代码页为 EBCDIC 的 DB2,那么整理顺序与 Java 程序中执行的排序不一样。 某些数据库将 NULL 值排序为低,而其他数据库将 NULL 值排序为高。
- 算术溢出导致 SQL 中发生异常,但在 Java 语言中不会发生异常。
- 对于浮点值,SQL 数据库有不同的最大范围和最小范围,这可能会与 Java 语言中的浮点值范围不同。 接近 Java Double 范围限制的值可能无法转换为 SQL。
- Java 方法不转换为 SQL;因此标准 EJB 查询无法包含 Java 方法。笔记:只有使用动态 EJB 查询服务,您才可以使用不转换为 SQL 的函数。 这样的函数包括将企业 Bean 映射至关系数据库 (RDB) 时所用的 Java 方法和转换器或组合器。 使用任何这些函数的标准查找器或选择查询在部署时失败,并显示以下消息Cannot push down query. (您通过更改查询或映射来解决此问题。) 但是,动态查询运行时通过执行涉及应用程序服务器中函数的操作来处理查询。