当前位置: 首页 > 面试题库 >

HQL查询中的休眠表未映射错误

杭永安
2023-03-14
问题内容

我有一个使用Hibernate在数据库上进行CRUD操作的Web应用程序。我收到一条错误消息,说该表未映射。查看Java文件:

错误信息:

org.springframework.orm.hibernate3.HibernateQueryException: Books is not mapped [SELECT COUNT(*) FROM Books]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: Books is not mapped [SELECT COUNT(*) FROM Books]
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:660)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
...
Caused by: org.hibernate.hql.ast.QuerySyntaxException: Books is not mapped [SELECT COUNT(*) FROM Books]
at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:181)
at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:111)
at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:93)
...

这是我的DAO.java方法:

public int getTotalBooks(){
    return DataAccessUtils.intResult(hibernateTemplate.find(
          "SELECT COUNT(*) FROM Books"));
}

Book.java

@Entity
@Table(name="Books")
public class Book {

    @Id
    @GeneratedValue
    @Column(name="id")
    private int id;

    @Column(name="title", nullable=false)
    private String title;
    ...
}

我应该如何修改才能正常工作?


问题答案:

异常消息怎么说?它说:

Books is not mapped [SELECT COUNT(*) FROM Books]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: Books is not mapped [SELECT COUNT(*) FROM Books]

这告诉你什么?它告诉您Books未映射。也就是说,没有称为的映射类型Books

确实,没有。您的映射类型称为Book。它映射到名为的表Books,但类型称为Book。在编写HQL(或JPQL)查询时,您使用类型的名称,而不是表。

因此,将查询更改为:

select count(*) from Book

虽然我认为可能需要

select count(b) from Book b

如果HQL不支持该*表示法。

阅读异常消息可以学到很多东西!



 类似资料:
  • 问题内容: 我有一个使用Hibernate在数据库上进行CRUD操作的Web应用程序。我收到一条错误消息,说该表未映射。查看Java文件: 错误信息: 这是我的DAO.java方法: Book.java: 我应该如何修改才能正常工作? 问题答案: 异常消息怎么说?它说: 这告诉你什么?它告诉你未映射。也就是说,没有称为的映射类型。 确实,没有。你的映射类型称为。它映射到名为的表,但类型称为。在编写

  • 问题内容: 可以使用在HQL中覆盖。 是否也可以覆盖?怎么样? 问题答案: Hibernate Docs 中的此代码段中的限定词意味着您可以用热切的方法覆盖懒惰,但不能用其他方法来替代: 如果您正在使用属性级别的延迟获取(通过字节码检测),则可以强制Hibernate使用获取所有属性立即在第一个查询中获取延迟属性。 不寻常的是,如果您使用Criteria API从急切变为懒惰,则看起来可以。只需调

  • 问题内容: 我对HQL查询和hibernate有疑问。 我有一个用户类和一个角色类。用户可以具有许多角色。所以我有一个像这样的ManyToMany关系: 在用户类别中: 在角色类中: 此映射创建了存储关系的第三个表(PORTAIL_USERROLE)。像这样一切正常。当我有一个用户时,我将检索角色。 但是,我的问题是:在HQL查询中,如何获得具有特定角色的所有用户?任何类都代表PORTAIL_US

  • 问题内容: 我正在尝试从当前日期在任何给定月份的第一天和最后一天之间的表中提取信息。 我收到运行时错误“命名查询中的错误:Department.byDate” 我正在向您提供我认为可能导致问题的代码,如果需要任何其他代码,请在评论中告知我。 我的命名查询如下所示: 我在DAO中以一种类似于以下方式的方法使用此命名查询: 我获取月份的第一天和最后几天的方法如下: 问题答案: 在HQL / JPQL中

  • 问题内容: 我试图从“用户”表中获取所有用户的列表,但出现以下错误: 这是我编写的用于添加/获取用户的代码: 添加用户是可行的,但是当我使用getUsers函数时,出现这些错误。 这是我的休眠配置文件: 这是我的User类: 知道为什么我会收到此错误吗? 问题答案: 在HQL中,应使用映射的 java类名 和 属性名 ,而不是实际的表名和列名,因此HQL应该为: 更新:更精确地说,您应该使用在中配