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

标签 java mysql sql jpa eclipselink

背景:总是让 ORM 用户感到困惑的一件事是 null在 SQL 中,99% 的编程语言的处理方式非常不同,主要是 null == nulltrue几乎到处都是null == nullfalse在 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/

相关文章:

java - ClipDrawable getDrawable() 返回一个 StateListDrawable

java - 在android中保存对象

java, l = inputStream.readLine()) != null 背后的原理逻辑

mysql - 如何从表中选择特定的 id,同时找出一个查询中总共有多少行?

mysql - 我可以只在 JOIN 失败的地方使用 MySQL SELECT 行吗?

java - JDBC/连接器j : Understanding connection pooling

sql - 仅在数据库上触发而不是在表上触发

java - 更新映射为 @ManyToMany、@JoinTable 和 @OrderColumn(具有唯一约束)的实体列表时出现 MySQLIntegrityConstraintViolationException

sql - 使用sql在oracle中创建文本文件

java - 转换查询时的 hibernate.QueryException