1

我正在编写以下 HQL 查询。

select a.col1, a.col2 from MyEntity a

但是 Hibernate 将此查询创建为

select a.col1, a.col2 from in.xxx.yyy.zzz.MyEntity a

这里的.xxx.yyy.zzz是MyEntity的包名,在hbm.xml文件中有提到。现在,当休眠执行此查询时,它会给出以下错误。

org.hibernate.hql.internal.ast.QuerySyntaxException: expecting OPEN, found '.' near line 1, column 264

我认为它正在考虑将包名称中的“in..”作为 IN 关键字,并期望其中有一些价值。

问题是为什么当我在 HQL 中使用简单名称时,hibernate 对此实体使用完全限定的路径名​​?

我们可以转义具有特殊关键字的实体名称吗?

4

2 回答 2

1

最后我找到了解决方案。

我必须在我的 hbm.xml 中添加 entity-name 属性,其值仅作为不合格的类名,如下所示。

<class name="in.xxx.yyy.zzz.MyEntity" entity-name="MyEntity" 
table="MY_TABLE">

但痛苦是我必须将此属性添加到与该实体映射的所有实体 hbm 文件中。

但它正在工作。

感谢乔塔拉斯的支持。

于 2013-09-13T05:51:35.677 回答
0

将别名放在实体名称之后,因为您使用了 a.col1、a.col2。

查询:

select a.col1, a.col2 from MyEntity a

Hibernate 转换所有命名空间,因为您可以在不同的包中定义更多具有相同名称的类,因此如果 Hibernate 构建所有路径,则没有歧义

于 2013-09-12T12:42:13.840 回答