【问题标题】:Hibernate, SQL in HQL (NativeQuery)Hibernate,HQL 中的 SQL (NativeQuery)
【发布时间】:2020-10-04 05:25:58
【问题描述】:

我从 Hibernate 开始。我正处于这一点,我在 HQL 中尝试 SQL。 我看到了一个我想重新创建的代码示例,但我的输出最终有所不同。 该人说,要在 HQL 中使用 SQL,如果您只想使用几列,则需要使用 Map 来获取某些列(所以我不能在这里简单地使用 addEntity)。 我的学生表有 sId、sName、sMarks。现在我只想检索学生姓名 (sName) 和他们的分数 (sMarks)。 问题是,我只得到“null”作为名称和标记的值,而对象向我显示了正确的值:

控制台输出: 休眠:从学生中选择 sName、sMarks
{SNAME=1 号无名傻瓜,SMARKS=65} 空:空

代码:

NativeQuery querySQL2 = session.createNativeQuery("SELECT sName,sMarks "
            +                                   "FROM student");
querySQL2.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
List students = querySQL2.getResultList();
for (Object o : students)
{
    System.out.println(o);
    Map m = (Map)o;
    System.out.println(m.get("sName") + " : " + m.get("sMarks"));
}

为什么我用 Syso(o) 得到正确的对象,而用 Syso(m.get("...")) 得到空值? 提前谢谢!

【问题讨论】:

    标签: sql hibernate hql nativequery


    【解决方案1】:

    其实你已经回答了你的问题 {SNAME=Nameless fool number 1, SMARKS=65}。 Hibernate 将列名转换为大写。

    【讨论】:

    • 就是这样,非常感谢。我正在完成一个教程,那个得到了很好的评价,但是是从去年开始的。这可能是以前不同的吗?我将所有已弃用的功能与当前的功能进行了交换,但这并没有引起我的注意,因为他也使用了小字符。多亏了你,我学到了另一件事,那就是对 SQL 不太熟悉,在这种情况下,使用大字符或小字符通常并不重要。祝你有个愉快的夜晚:)
    • 有没有提到教程中使用了什么数据库?它可能取决于它以及休眠命名策略。看看吧
    • 啊啊!你说的对!他使用的是 MySQL,而我使用的是 Oracle SQL Developer。可能就是这样!我正在为一份新工作做准备,我得到了新的话题。所以我选择了他们使用的数据库。再次,非常感谢:)
    猜你喜欢
    • 2023-04-02
    • 2012-02-15
    • 2011-05-08
    • 2016-02-28
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多