Hibernate将非限定类名转换为限定类并给出语法错误

时间:2013-09-12 12:12:09

标签: hibernate escaping hql keyword

我正在编写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中使用简单名称时为此实体使用完全限定的路径名​​?

我们可以使用特殊关键字转义实体名称吗?

2 个答案:

答案 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构建所有路径,那么就没有歧义