ORMLiteパッケージに問題があります。テーブルのスキーマを生成するとき、すべてのエンティティ名をエスケープすることをお勧めします。これにより、一部のJavaクラスまたはフィールド名がSQLの予約語になるのを防ぐことができます。
CREATE TABLE "footable" ("stuff" VARCHAR(255))
ORMLiteがユーザーが独自のクエリを実行できるように、「生の」クエリサポートを追加しています。ただし、DerbyとHsqldbでは、エスケープせずにエンティティ名を使用することはできません。たとえば、次のクエリ:
SELECT * FROM footable
次のエラーが生成されます。
Derby: ERROR 42X05: Table/View 'FOOTABLE' does not exist.
Hsqldb: Table not found in statement [select * from footable]
選択テーブルもとしてエスケープされている場合は、正常に機能します"footable"
。ORMLiteでサポートされている他のデータベース(MySQL、Postgres、Microsoft SQL Server、H2、およびSqlite)は、エスケープの有無にかかわらず正常に動作します。
DerbyとHsqldbで予約語をエスケープするためのより良い方法はありますか?ポータブルな方法でこれを行う方法に関する他のアイデアはありますか?
ありがとう。