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 は、hbm.xml ファイルに記載されている MyEntity のパッケージ名です。hibernate がこのクエリを実行すると、次のエラーが発生します。

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

パッケージ名の「in..」をINキーワードと見なし、そこに何らかの値を期待していると思います。

質問は、HQL で単純な名前を使用しているときに、休止状態がこのエンティティに完全修飾パス名を使用しているのはなぜですか?

特別なキーワードを持つエンティティ名をエスケープできますか?

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 に答える