背景:总是让 ORM 用户感到困惑的一件事是 null
在 SQL 中,99% 的编程语言的处理方式非常不同,主要是 null == null
是true
几乎到处都是null == null
是false
在 ANSI SQL 中。
EclipseLink 不会将空的绑定(bind)参数转换为正确的 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 类,并在其中添加您需要的任何运算符。请参阅 SQLServerPlatform initializePlatformOperators 方法作为如何为 SQLServer 数据库设置特定运算符的示例。您可能希望使用可用于您的数据库的任何运算符来覆盖 addOperator(simpleRelation(Equal, "=", "equal")) 。
关于java - EclipseLink/JPA 是否有用于修改生成的 SQL 的插件框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59000632/