Hibernate 中出现 QuerySyntaxException: users is not mapped


User.hbm.xml:
<class name="com.lian.bean.User" table="users">
hibernate.cfg.xml:
<mapping resource="com/lian/bean/User.hbm.xml" />

或用注解的方式:

@Entity
@Table(name = "users")
public class User implements Serializable{ }


String sql = "select u.password from users u where u.username='" +user.getUsername()+ "'";
经过多番纠结和耐心查找资料,发现:
原来 HQL语句中表名应该是ORM映射的类名,所以应该改成:
String sql = "select u.password from User u where u.username='" +user.getUsername()+ "'";
sql 语句查找的是生成的User 类,不是普通的表。

### Hibernate 中 `QuerySyntaxException` 错误分析 当遇到错误 `org.hibernate.hql.internal.ast.QuerySyntaxException: jfMaterialCheckPlan is not mapped [FROM jfMaterialCheckPlan WHERE id= :id]` 时,表明 HQL 查询中的实体名称 `jfMaterialCheckPlan` 并未被正确映射到数据库表。这通常意味着应用程序无法识别该实体类。 #### 原因解析 此问题可能由以下几个原因引起: - 实体类未在配置文件中注册。 - 映射文件路径不正确或缺失。 - 使用的类名大小写敏感度不同,在某些情况下区分大小写的环境可能导致匹配失败[^1]。 #### 解决方法 为了修复这个问题,可以采取以下措施来确保实体类已被适当映射并能正常工作: ##### 配置映射关系 确认 Hibernate 的 XML 或 Java 注解方式已正确定义了所有必要的映射信息。对于基于 XML 文件的方式来说, 应检查是否有如下形式的条目存在于主配置文件 (通常是 hibernate.cfg.xml): ```xml <mapping class="com.example.JfMaterialCheckPlan"/> <!-- 或者 --> <mapping resource="path/to/your/entity-mapping-file.hbm.xml"/> ``` 如果采用的是 JPA 注解,则需保证实体类上标注有 `@Entity` 和其他相关联的信息标签,并且这些注解已经被扫描加载到了 SessionFactory 中[^2]。 ##### 检查命名空间和包声明 确保所有的导入语句都指向正确的包位置,并且项目结构与预期一致。例如,假设 `JfMaterialCheckPlan.java` 存在于 `com.myapp.domain` 下面,那么应该这样引入它: ```java import com.myapp.domain.JfMaterialCheckPlan; ``` 同时也要注意实际使用的查询字符串是否遵循了同样的命名约定——即首字母大写的全限定类名。 ##### 更新会话工厂设置 有时即使已经完成了上述步骤仍然会出现此类异常提示,这时可尝试重新创建一个新的SessionFactory实例或者重启应用服务器使新的配置生效[^3]。 ```java Configuration configuration = new Configuration(); configuration.configure("hibernate.cfg.xml"); ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() .applySettings(configuration.getProperties()).build(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); ``` 通过以上调整应当能够有效解决由于实体未映射所引发的 `QuerySyntaxException` 异常情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值