我正在编写HQL查询。
select a.col1, a.col2 from MyEntity a
但是Hibernate将此查询创建为
select a.col1, a.col2 from in.xxx.yyy.zzz.MyEntity a
这里in.xxx.yyy.zzz是MyEntity的包名,在hbm.xml文件中提到。现在,当hibernate执行此查询时,它会产生以下错误。
org.hibernate.hql.internal.ast.QuerySyntaxException: expecting OPEN, found '.' near line 1, column 264
我认为它正在考虑包名中的'in ..'作为IN关键字,并期待它有一些价值。
问题是为什么hibernate在HQL中使用简单名称时为此实体使用完全限定的路径名?
我们可以使用特殊关键字转义实体名称吗?
答案 0 :(得分:1)
最后我找到了解决方案。
我必须在我的hbm.xml中添加entity-name属性,其值仅为非限定类名,如下所示。
<class name="in.xxx.yyy.zzz.MyEntity" entity-name="MyEntity"
table="MY_TABLE">
但痛苦是我必须将此属性添加到与此实体映射的所有实体hbm文件中。
但它正在发挥作用。
感谢Joe Taras的支持。
答案 1 :(得分:0)
将别名设为后实体名称,因为您使用了a.col1,a.col2。
查询:
select a.col1, a.col2 from MyEntity a
Hibernate转换所有命名空间,因为你可以在不同的包中定义更多具有相同名称的类,所以如果Hibernate构建所有路径,那么就没有歧义