休眠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 = ?"