【问题标题】:How to select from an Oracle 11g table called User using HQL如何使用 HQL 从名为 User 的 Oracle 11g 表中进行选择
【发布时间】:2015-05-06 01:30:16
【问题描述】:

在 Oracle 中,如果您将表命名为 User,则必须通过在单词 user 周围加上引号来查询该表。

这行不通

select * from User

这会起作用

select * from "User"

我的问题是,如何在名为 User 的表上运行休眠 HQL 查询?我试过把“”放在用户周围,转义引号,单引号,没有用。 HQL 不喜欢那些字符和错误。我用谷歌搜索并搜索了解决方案,但一无所获。

【问题讨论】:

  • 提示:不要使用 Oracle 关键字作为表名或列名。你能创建一个存储过程来返回表上的游标吗?
  • 是的,那是一个充满自信的时刻,“我以后就可以用引号括起来了!”。创建存储过程以返回表上的游标是一个有趣的想法。我敢打赌这会奏效,但我很好奇是否有更直接的解决方案。
  • 为这个表创建一个同义词,有更好的名字。 PS:Oracle 试图向后兼容,因此许多新的关键字仍然可以用作标识符。例如,您仍然可以将表命名为“model”、“join”或“commit”。
  • 这是一个好主意,我忘记了同义词!谢谢!

标签: java oracle hibernate hql hibernate-mapping


【解决方案1】:

您需要在实体映射中转义表名:

@Entity 
@Table(name="`User`")
public class User {
...
}

当你像这样编写 HQL 查询时:

from User

Hibernate 会生成这样的 SQL 查询:

select * from "User"

【讨论】:

  • 请注意,在这种情况下——使用引号时——“User”和“USER”是两个不同的表名。引号还强制区分大小写。
猜你喜欢
  • 1970-01-01
  • 2012-05-06
  • 2020-12-29
  • 2020-10-18
  • 2015-10-01
  • 2012-05-08
  • 2011-11-25
  • 1970-01-01
  • 2016-05-21
相关资源
最近更新 更多