EclipseLink/JPA 是否有用于修改生成的 SQL 的插件框架?

Does EclipseLink/JPA have a plugin framework for modifying generated SQL?

背景:总是让 ORM 用户感到困惑的一件事是 null 在 SQL 中的处理方式非常不同,99% 的编程语言,主要是 null == nulltrue几乎无处不在,但 null == null 在 ANSI SQL.

中是 false

EclipseLink 不会 将空的绑定参数转换为正确的 IS NULL,而是会犯 WHERE table.field = null 错误。

SQL 有一个 null 安全比较运算符:https://twitter.com/gabidavila/status/1101987501923811328

我们想以某种方式更改 SQL 的生成,使其始终在 where 子句中使用 <=> 运算符。 EclipseLink 中是否有执行此操作的工具?我们能以某种方式扩展其中一种方言吗?

另一种方法是为每次比较写这样的东西,哎呀。

(agentRef = :agentRef OR agentRef IS NULL AND :agentRef IS NULL)

谢谢!

您可以指定一个 DatabasePlatform class,并在其中添加您需要的任何运算符。请参阅 SQLServerPlatform initializePlatformOperators 方法作为如何为 SQLServer 数据库设置特定运算符的示例。您可能希望使用可用于您的数据库的任何运算符来覆盖 addOperator(simpleRelation(Equal, "=", "equal")) 。