gpt4 book ai didi

java - 是否有 jpa 或 hibernate 属性使所有查询不区分大小写

转载 作者:行者123 更新时间:2023-12-01 16:38:59 36 4
gpt4 key购买 nike

我正在寻找一种优雅的方法来使 jpa hibernate 中的所有查询不区分大小写。底层数据库是Oracle

在查询中我们可以单独这样写

upper(entity.field) = upper(:value) 

or

Restrictions.eq(entity.field, value).ignoreCase()

有没有一种方法我们不必在每个查询中单独执行此操作,而是在整个 session 中处理它

最佳答案

TL;DR - 我不知道有这样的属性或配置选项,并且有充分的理由说明为什么不可能有任何属性或配置选项(见下文)。

你的问题有点误导。查询语言(JPQL)本身确实不区分大小写。不仅查询关键字不区分大小写,甚至对于 Java 区分大小写的标识符也不区分大小写。例如,您可以在同一个 Java 类中包含 myVarmyvarMYVAR,它们都是不同的实例变量。如果此类被转换为 @Entity 并且您使用该实体编写查询,那么对于 JPA 来说,您指的是哪个变量将是不明确的。 (虽然没有测试过,所以不确定会产生什么样的错误。)

您实际上想要的是字符串比较不区分大小写,这完全是另一回事。这些比较是在数据库端执行的,因此从技术上讲,这取决于数据库如何实现 = 运算符。实际上,我不知道有任何关系数据库不区分大小写的字符串值。

既然你提到了Oracle - 在Oracle中,标识符确实不区分大小写(除非引用),并且由数据库自动大写。这是 20 世纪 80 年代的遗留问题,当时计算机中的大多数文本通常都是大写的(参见 MSDOS、FAT 文件系统、BASIC 编程语言等)。

但这并不意味着数据库列中的字符串被视为不区分大小写。这是相当不切实际的,因为无法实际检查是否真正平等。因此,即使在 Oracle 中,'foo' = 'FOO' 的计算结果也为 false

关于java - 是否有 jpa 或 hibernate 属性使所有查询不区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61902766/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com