休眠QuerySyntaxException,表未映射

问题描述:

我正在关注此Tutorial。我添加了另一个DAO,我正在检索admin_roles表。该方法是这样的休眠QuerySyntaxException,表未映射

public List findAllAdminRoleByUserName(String userName) { 
    List<AdminRoles> users = new ArrayList<AdminRoles>(); 

    Query hqlQuery = sessionFactory.getCurrentSession().createQuery("from admin_roles AdminRoles where AdminRoles.username = ?"); 
    users = hqlQuery.setString(0, userName).list(); 

    if (users.size() > 0) { 
     return users; 
    } else { 
     return null; 
    } 
} 

当我试图找回我得到以下错误

HTTP Status 500 - Request processing failed; nested exception is org.hibernate.hql.internal.ast.QuerySyntaxException: admin_roles is not mapped [from admin_roles AdminRoles where AdminRoles.username = ?] 

我能够在本教程中提到的管理表中获取价值,我也创造了一些我能从中获得价值的其他表格。但只有这张表没有被映射。我也尝试通过将表名从“admin_roles”更改为adminroles(在数据库和代码中),我仍然得到相同的错误。

相关类看起来像这样。此外,实体注释是javax

@Entity 
@Table(name = "admin_roles", uniqueConstraints = @UniqueConstraint(columnNames = { "role", "username" })) 
public class AdminRoles{ 

我错过了什么吗?在此先感谢

您正在混淆表和实体。表是关系数据库的概念。它们映射到实体,即Java类。 HQL使用实体。总是。从不表格。

顺便说一下,该消息不是“表未映射”。这是“admin_roles未映射”。这是非常不同的。 HQL使用实体,因此它希望查询中的admin_roles成为映射实体。不是表名。而且您没有任何名为admin_roles的实体。

查询应该是

select ar from AdminRoles ar where ar.username = ? 

即假定存在一个名为在AdminRoles实体类username,当然映射字段/属性。

您需要在您的查询中使用实体名称。像这样尝试:

"from AdminRoles AR where AR.username = ?"