在 hbm.xml 中,经过增强后,我有 2 个 ABC 类的映射条目,两者都映射到表 ABC_TABLE
<class entity-name="ABC" name="model.ABC" table="ABC_TABLE">
<!-- property tags and id tag -->
</class>
<class entity-name="LazyABC" name="model.ABC" table="ABC_TABLE">
<!-- property tags and id tag -->
</class>
增强之前,hbm.xml 仅具有 ABC 类的entity-name="ABC"映射。
经过这样的增强后, 原始HQL查询代码
select new ABC(a.abcId, a.abcContent, a.abcEnding) from ABC a where....
执行时抛出异常。
异常(exception)是
org.springframework.orm.hibernate3.HibernateQueryException: Unable to locate class [ABC]
引起
org.hibernate.hql.ast.QuerySyntaxException: Unable to locate class [ABC]
然后我在网上找到了解决方案,只需将 ABC 构造函数名称更改为类的完整路径,例如
select new model.ABC(a.abcId, a.abcContent, a.abcEnding) from ABC a where....
然后问题就解决了,执行查询时没有抛出异常!
但是,我只是不知道为什么 hibernate 处理是这样的。
有人可以告诉我它成为解决方案的根本原因吗?
谢谢。 :)
最佳答案
首先,如果您需要基于对象的结果。使用Criteria
API。
您可能拥有 ABC
类的有效导入。但是HQL
不知道类的包名,因为它是String。因此,您应该提供包括包名称的完整路径。
关于java - Hibernate查询异常: Unable to locate class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37583921/