【问题标题】:hibernate generated sql query changes characters improperlyhibernate 生成的 sql 查询不正确地更改字符
【发布时间】:2016-02-17 22:18:42
【问题描述】:

DBMS - oracle 11gr2

我们最近升级了一个每月运行 10 次的 Java 控制台应用程序的 IDE 和操作系统。 现在我们的查询都不能正常工作,因为休眠将字母 i 转换为不是 I 的 İ。所有插入语句和 id 字段都受到负面影响。 现在在我们的查询中

id -> 不是 ID 插入 -> İNSERT 不是 INSERT 选择语句和插入都不会执行。

例如: 在以前的版本中,从表 a 中选择 id 现在发送到数据库作为

从表 a 中选择 İD,

而且我们根本没有这样一个名为 İD 的列。 堆栈跟踪如下


内部异常:java.sql.SQLSyntaxErrorException:ORA-00904:“İD”:geçersiz belirleyici(无效标识符)


查询:ReadObjectQuery(name="readObject" referenceClass=OrtakEntity sql="SELECT İD, ADİ, ALACAKLARİNDAHACİZVARMİ, ANNEADİ, FROM A WHERE (İD = ?)") ************************系统toplam肯定******************************0.0 ************************时间单位toplam确定****************************0 本地异常堆栈: 异常 [EclipseLink-4002] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.DatabaseException 内部异常:java.sql.SQLSyntaxErrorException:ORA-00904:“İD”:geçersiz belirleyici

错误代码:904 在 org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333) 在 org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:684) 在 org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:526) 在 org.eclipse.persistence.internal.session

【问题讨论】:

  • 哎呀,什么版本的休眠?我确定我记录了一个这样的错误并且它得到了修复。嗯,hibernate JIRA 此时似乎坏了。对所有 POST 的 HTTP/404。
  • org.hibernatehibernate-ehcache3.6.7.Final
  • 从 2011 年 8 月开始?从 2012 年 2 月开始尝试 3.6.10.Final 吗?但我不认为修复在那里,请参阅我的错误报告hibernate.atlassian.net/browse/HHH-8579
  • 保留 3.6.7.Final 的解决方案显然是在变量/属性/列名称的标识符中使用严格的 US-ASCII。也许您可以通过在 HBM 或 JPA 注释中为列名使用反引号字符来强制转义。喜欢@Column(name="`non_USASCII_id`")
  • 我通过将计算机的区域设置更改为英语和美国解决了这个问题。

标签: oracle hibernate jdbc


【解决方案1】:

我通过将计算机的设置更改为英语和美国作为位置解决了这个问题。 (仍然不是最好的方法,但现在程序运行了)

【讨论】:

    猜你喜欢
    • 2019-09-11
    • 2021-10-18
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    相关资源
    最近更新 更多