将 ORMLite 与 Oracle 一起使用时,列名不是大写

Posted

技术标签:

【中文标题】将 ORMLite 与 Oracle 一起使用时,列名不是大写【英文标题】:column name is not upper case when using ORMLite with Oracle 【发布时间】:2013-05-23 00:40:34 【问题描述】:

我正在使用最新的 ORMLite 来查询 Oracle 数据库。我在 Spring 中创建了所有 DAO,并为我的关键字段添加了 @DatabaseField(id = true) 注释。在 Spring 配置中,我的 JDBC url 就像 jdbc:oracle....

但是当我通过queryById(...)queryForEq(...) 等执行查询时,ORMLite 总是尝试使用在我的实体类中定义的带有小写和双引号的列名,这样 Oracle 不喜欢它并抛出一个例外:

(ORA-00904: "id": invalid identifier)

有人知道解决办法吗?

【问题讨论】:

您使用的是什么版本的 ORMLite? 【参考方案1】:

不知道ORMLite,但是根据@DatabaseField Javadoc,可以在注解中重新定义列名:

@DatabaseField(id = true, columnName = "ID")

【讨论】:

谢谢回答,但这会失去与 SQLServer 等其他数据库的兼容性,其他数据库可能使用小写的列名 好的,那么你可以反过来:将 Oracle 列名从“ID”更改为“id”:ALTER TABLE X RENAME COLUMN ID TO“id” @Eric Citaire 请不要。这将使使用该数据库的其他一切变得更加困难。尤其是编写即席查询进行故障排除。 你看到this了吗?也许你只需要更新 ORMLite。【参考方案2】:

(ORA-00904:“id”:无效标识符)

在 ORMLite 的 4.42 版中,我们更改了 OracleDatabaseType 以生成大写实体。这应该是ID。我怀疑您运行的是较低版本的 ORMLite,您应该考虑升级。

如果不是这样,请提供您的版本号并显示您的实体字段。

【讨论】:

我正在使用来自 Maven 存储库的 4.45 的最新 ORMLite。我的实体字段类似于:private int id with annotation(@DatabaseField(id = true))

以上是关于将 ORMLite 与 Oracle 一起使用时,列名不是大写的主要内容,如果未能解决你的问题,请参考以下文章

如何将 ORMLite 与原生 Android 驱动程序一起使用?

将 SELECT DISTINCT ON 与 OrmLite 一起使用

java 与ormlite一起使用的mysql6 db类型

在 Android 上使用 OrmLite 进行 Proguard

将 oracle Rownum 与 between 关键字一起使用

使用 OrmLite,有没有办法在我的 POCO 被修改时自动更新表模式?